零基础上手nerdctl:30分钟掌握容器生命周期管理
你是否还在为Docker命令复杂而头疼?是否想快速掌握容器管理却不知从何下手?本文将带你30分钟内从零开始,轻松掌握nerdctl的容器生命周期管理,让你成为容器管理高手。读完本文,你将学会安装配置nerdctl、掌握容器的创建、运行、停止、删除等基本操作,以及使用Compose管理多容器应用和实现Rootless模式增强安全性。
什么是nerdctl
nerdctl是一个与Docker兼容的CLI工具,专为containerd设计,支持Compose、Rootless、eStargz、OCIcrypt、IPFS等功能。它的目标是方便用户体验containerd中那些Docker尚未提供的前沿特性。nerdctl的使用方式与Docker类似,对于熟悉Docker的用户来说,上手nerdctl非常容易。
官方文档:README.md
安装与配置nerdctl
安装依赖
在安装nerdctl之前,需要确保系统中已安装以下组件:
- CNI plugins:用于
nerdctl run命令。推荐使用v1.1.0或更高版本。 - BuildKit(可选):用于
nerdctl build命令。需要运行BuildKit守护进程(buildkitd)。推荐使用v0.11.0或更高版本。 - RootlessKit 和 slirp4netns(可选):用于Rootless模式。RootlessKit需要v0.10.0或更高版本,推荐v2.0.0或更高版本;slirp4netns需要v0.4.0或更高版本,推荐v1.1.7或更高版本。
这些依赖在nerdctl-full-<VERSION>-<OS>-<ARCH>.tar.gz中包含,但在nerdctl-<VERSION>-<OS>-<ARCH>.tar.gz中不包含。
安装nerdctl
Linux系统(Brew)
在Linux系统上,可以通过brew安装nerdctl:
brew install nerdctl
macOS系统
Lima项目为macOS提供了Linux虚拟机,并内置了nerdctl集成。安装命令如下:
$ brew install lima
$ limactl start
$ lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
从源码编译
如果你想从源码编译nerdctl,可以按照以下步骤进行:
make && sudo make install
编译依赖:go.mod
配置nerdctl
nerdctl的配置文件可以在/etc/nerdctl/nerdctl.toml或~/.config/nerdctl/nerdctl.toml中进行设置。你可以根据自己的需求配置镜像仓库、网络、存储等参数。
配置指南:docs/config.md
容器基本操作
拉取镜像
使用nerdctl pull命令拉取镜像,例如拉取alpine镜像:
# nerdctl pull alpine
运行容器
使用nerdctl run命令运行容器,例如以交互方式运行alpine容器:
# nerdctl run -it --rm alpine
其中,-it表示交互式终端,--rm表示容器退出后自动删除。
命令参考:docs/command-reference.md
查看容器
使用nerdctl ps命令查看正在运行的容器:
# nerdctl ps
加上-a选项可以查看所有容器(包括已停止的):
# nerdctl ps -a
停止容器
使用nerdctl stop命令停止容器,需要指定容器ID或名称:
# nerdctl stop <container_id_or_name>
启动容器
使用nerdctl start命令启动已停止的容器:
# nerdctl start <container_id_or_name>
删除容器
使用nerdctl rm命令删除容器:
# nerdctl rm <container_id_or_name>
如果要强制删除正在运行的容器,可以加上-f选项:
# nerdctl rm -f <container_id_or_name>
使用Compose管理多容器应用
nerdctl支持Docker Compose,你可以使用nerdctl compose命令来管理多容器应用。首先,创建一个docker-compose.yaml文件,定义应用的服务、网络、卷等配置。
例如,一个简单的WordPress应用的docker-compose.yaml文件如下:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data:
然后,使用以下命令启动应用:
# nerdctl compose -f docker-compose.yaml up -d
其中,-d表示后台运行。
Compose教程:examples/compose-wordpress
Rootless模式增强安全性
Rootless模式允许在非root用户下运行容器,增强了系统的安全性。要启用Rootless模式,需要使用containerd-rootless-setuptool.sh脚本进行设置。
安装Rootless containerd
$ containerd-rootless-setuptool.sh install
[INFO] Checking RootlessKit functionality
[INFO] Checking cgroup v2
[INFO] Checking overlayfs
[INFO] Creating /home/testuser/.config/systemd/user/containerd.service
...
[INFO] Installed containerd.service successfully.
[INFO] To control containerd.service, run: `systemctl --user (start|stop|restart) containerd.service`
[INFO] To run containerd.service on system startup, run: `sudo loginctl enable-linger testuser`
[INFO] Use `nerdctl` to connect to the rootless containerd.
[INFO] You do NOT need to specify $CONTAINERD_ADDRESS explicitly.
Rootless文档:docs/rootless.md
在Rootless模式下运行容器
安装完成后,直接使用nerdctl命令即可在Rootless模式下运行容器:
$ nerdctl run -d -p 8080:80 --name nginx nginx:alpine
容器生命周期管理实战
下面通过一个完整的示例,演示容器的生命周期管理。
1. 拉取镜像
# nerdctl pull nginx:alpine
2. 运行容器
# nerdctl run -d -p 8080:80 --name mynginx nginx:alpine
3. 查看容器状态
# nerdctl ps
4. 访问容器服务
在浏览器中访问http://localhost:8080,可以看到Nginx的默认页面。
5. 查看容器日志
# nerdctl logs mynginx
6. 进入容器
# nerdctl exec -it mynginx sh
7. 停止容器
# nerdctl stop mynginx
8. 启动容器
# nerdctl start mynginx
9. 重启容器
# nerdctl restart mynginx
10. 删除容器
# nerdctl rm -f mynginx
总结与展望
通过本文的学习,你已经掌握了nerdctl的基本使用方法,包括安装配置、容器基本操作、使用Compose管理多容器应用以及Rootless模式的配置和使用。nerdctl作为一个与Docker兼容的CLI工具,为containerd用户提供了便捷的容器管理方式。
未来,nerdctl还将不断发展,支持更多的新特性和功能。建议你关注nerdctl的官方仓库,及时了解最新的更新和动态。
希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。记得点赞、收藏、关注三连,下期我们将带来更多关于容器技术的精彩内容!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



