前语:
根据上一篇文章,我们能够将Containerd安装部署起来,接下来要探讨的是如何使用它,去pull,push镜像,start,stop容器等相关操作。Containerd默认提供的CLI工具是ctr,但是这个命令使用起来确实不太方便,而大牛们也注意到了这一点。
于是,nerdctl命令工具应运而生。
nerdctl是一个类似于Docker CLI的命令工具,用于管理和运行容器,它提供与Docker兼容的接口,并支持和containerd集成。
总之一句话:能够让你感受到使用docker命令时候的快感!对从docker迁到containerd的人非常友好(就比如我)。
nerdctl安装:
官网地址:“https://github.com/containerd/nerdctl”
# 下载安装包
wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
# 解压
mkdir /root/nerdctl
tar -zxvf nerdctl-1.4.0-linux-amd64.tar.gz -C /root/nerdctl
cd /root/nerdctl && ls
containerd-rootless-setuptool.sh containerd-rootless.sh nerdctl
# 安装
cp -a nerdctl /usr/local/nerdctl
> nerdctl --version
nerdctl version 1.4.0
之后,我们需要再安装buildkit命令,该命令会在使用Dockerfile构建时调用,否则构建镜像会失败
buildkit安装
官网地址:“Releases · moby/buildkit · GitHub”;该部分内容参考文章: https://www.jianshu.com/p/835179171609
# 下载安装包
wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz
# 解压
tar -zxvf buildkit-v0.11.6.linux-amd64.tar.gz
# 安装
cp -a bin/buildctl /usr/local/bin/
> buildctl -version
buildctl github.com/moby/buildkit v0.11.6 2951a28cd7085eb18979b1f710678623d94ed578
# 配置systemd管理
vi /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=/usr/local/bin/buildkitd
ConditionPathExists=/usr/local/bin/buildkitd
After=containerd.service
[Service]
Type=simple
ExecStart=/usr/local/bin/buildkitd
User=root
Restart=on-failure
RestartSec=1500ms
[Install]
WantedBy=multi-user.target
# 启动
systemctl daemon-reload && systemctl start buildkitd && systemctl enable buildkitd
命名空间
命名空间是一种隔离机制,用于将系统资源(如进程、文件系统、网络)对不同实体进行隔离,使它们在各自的环境中运行,互不干扰。
在使用nerdctl命令的使用,我们就可以将不同的资源放到不同的命名空间当中,进行隔离管理,比如镜像,容器等,使其资源,进程之间相互独立,互不影响,安全性和可靠性。
默认使用的是default
命名空间:
# 查看有哪些命名空间
nerdctl namespace list (简写:nerdctl ns ls)
NAME CONTAINERS IMAGES VOLUMES LABELS
buildkit 1 2 0
default 1 4 0
# 当前环境是有两个命名空间,其中不同空间的资源是不同的,比如镜像:
》nerdctl -n default images
REPOSITORY TAG
busybox latest
mysql 5.7
nginx latest
》nerdctl -n buildkit images
REPOSITORY TAG
busybox latest
nginx latest
# 由上可以看出,default命名空间下相比较于buildkit命名空间,多一个mysql:5.7的镜像。
操作手册
-
镜像下载
nerdctl pull nginx:latest # 默认从hub.docker.com上拉取
-
查看镜像
nerdctl -n default images
-
运行容器
nerdctl run -d --name first_container -p 80:80 -v /logs:/usr/local/nginx/logs nginx:latest
-
进入容器
nerdctl exec -ti first_container bash
-
查看容器
nerdctl ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
548b031877be docker.io/library/nginx:latest "/docker-entrypoint.…" About a minute ago Up 0.0.0.0:80->80/tcp first_container
-
容器详情
nerdctl inspect first_container
-
容器日志
nerdctl logs -f first_container
-
容器状态
nerdctl stats first_container
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ce682d8a75d6 first_contai 0.00% 1.973MiB / 8EiB 0.00% 1.02kB / 612B 0B / 15.4kB 3
-
停止,启动,重启
nerdctl stop first_container
nerdctl start first_container
nerdctl restart first_container
-
杀死容器
nerdctl kill first_container
-
删除容器
nerdctl rm -f first_container
-
构建镜像
# 编写Dockerfile,内容如下:
FROM busybox:latest
RUN echo "I'm not interested in money" > /root/demo.txt
# 构建镜像
nerdctl build -t busybox:v1.0 ./
-
登录镜像仓库
# nerdctl login --username=吃不胖的鱼77 registry.cn-hangzhou.aliyuncs.com
Enter Password:
WARNING: Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
-
上传镜像
# 修改镜像tag
nerdctl tag busybox:latest registry.cn-hangzhou.aliyuncs.com/week123456/busybox:latest
# 上传镜像
nerdctl push registry.cn-hangzhou.aliyuncs.com/week123456/busybox:latest
-
打包镜像
nerdctl save -o mysql.tar.gz mysql:5.7
-
导入镜像
nerdctl load -i mysql.tar.gz
更多命令参数,详细见--help显示。
结语
nerdctl秉承了docker命令的操作方法,使用起来确实很方便,不单单仅是方面罗列的功能,还包括volume卷,网络操作,甚至支持docker-compose的编写,调试kubernetes等。综合来看,nerdctl是一个可行的容器管理工具,某种意义上也是Docker命令工具的一种替代品。