容器系列-2使用containerd管理容器

上篇讲了高级别runtime包括docker、containerd、podman等,本节演示containerd的使用。

安装及配置containerd

步骤1:安装containerd

[root@vms103 ~]# yum install  containerd.io cri-tools  -y

...大量输出...

作为依赖被安装:

...

selinux-policy.noarch 0:3.13.1-268.el7_9.2 selinux-policy-targeted.noarch 0:3.13.1-268.el7_9.2      

完毕!

[root@vms103 ~]#

步骤2:修改配置文件

containerd的配置文件是/etc/containerd/config.toml。修改配置文件内容如下:

[root@vms103 ~]# cat /etc/containerd/config.toml

disabled_plugins = ["restart"]

[plugins.linux]

shim_debug = true

[plugins.cri.registry.mirrors."docker.io"]

endpoint = ["https://frz7i079.mirror.aliyuncs.com"]

[root@vms103 ~]#

这里设置了加速器。

这个文件的内容可以根据如下命令生成然后修改:

containerd config default > /etc/containerd/config.toml

步骤3:启动containerd并设置为开机自动启动

[root@vms103 ~]# systemctl enable containerd

Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.

[root@vms103 ~]# systemctl start containerd

[root@vms103 ~]#

containerd客户端工具有ctr和crictl两个。

如果使用crictl命令的话需要执行

[root@vms103 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

[root@vms103 ~]#

镜像管理

步骤4:查看现有镜像

[root@vms103 ~]# ctr i list

REF TYPE DIGEST SIZE PLATFORMS LABELS

[root@vms103 ~]#

[root@vms103 ~]# crictl images

IMAGE               TAG                 IMAGE ID            SIZE

[root@vms103 ~]#

从这里可以看到,使用两个客户端查看都没有镜像。

 

步骤5:拉取镜像

使用crictl下载镜像的命令为 crictl pull 镜像,比如下载nginx镜像:

[root@vms103 ~]# crictl pull docker.io/nginx

Image is up to date for sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74

[root@vms103 ~]#

(使用ctr下载镜像的命令是ctr i pull 镜像名)

但是使用ctr命令进行查看的时候却是没有的,这是为何?

[root@vms103 ~]# ctr i list

REF TYPE DIGEST SIZE PLATFORMS LABELS

[root@vms103 ~]#

因为containerd和docker相比多了命名空间的概念。当使用crictl命令的时候,都是在k8s.io这个命名空间里的,而ctr默认是在default这个命名空间里。

所以当crictl下载镜像之后,会自动创建一个k8s.io,而下载的镜像就是放在k8s.io里的。

[root@vms103 ~]# ctr ns list

NAME   LABELS

k8s.io

[root@vms103 ~]#

因为ctr默认查看的是default命名空间,所以看不到下载的镜像。如果想查看其他命名空间里的镜像需要加上-n指定命名空间。

步骤6:查看k8s.io命名空间里的镜像

[root@vms103 ~]# ctr -n k8s.io i list -q

docker.io/library/nginx:latest

docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa

sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74

[root@vms103 ~]#

步骤7:修改默认的命名空间

如果ctr想切换到其他命名空间,只需定义变量CONTAINERD_NAMESPACE,比如:

[root@vms103 ~]# export CONTAINERD_NAMESPACE=k8s.io

[root@vms103 ~]# ctr i list -q

docker.io/library/nginx:latest

docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa

sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74

[root@vms103 ~]#

此时就不用指定命名空间了。

[root@vms103 ~]# ctr -n default  i list -q

[root@vms103 ~]#

对镜像重新打标签tag,语法为

ctr i tag  旧镜像  新镜像

步骤8:为镜像docker.io/library/nginx:latest打标签

[root@vms103 ~]# ctr i tag docker.io/library/nginx:latest rhce.cc/cka/nginx:v1

rhce.cc/cka/nginx:v1

[root@vms103 ~]#

查看镜像

[root@vms103 ~]# ctr i list -q

docker.io/library/nginx:latest

docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa

rhce.cc/cka/nginx:v1

sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74

[root@vms103 ~]#

步骤9:删除镜像

[root@vms103 ~]# ctr i rm docker.io/library/nginx:latest

docker.io/library/nginx:latest

[root@vms103 ~]#

容器管理

下面开始创建容器

步骤10:首先查看当前是否存在容器

[root@vms103 ~]# ctr c list

CONTAINER    IMAGE    RUNTIME

[root@vms103 ~]#

步骤11:创建容器

创建一个 名字为web1的容器

[root@vms103 ~]# ctr container create rhce.cc/cka/nginx:v1 web1

[root@vms103 ~]#

[root@vms103 ~]# ctr c list

CONTAINER    IMAGE                   RUNTIME

web1         rhce.cc/cka/nginx:v1    io.containerd.runc.v2

[root@vms103 ~]#

步骤12:删除容器

[root@vms103 ~]# ctr c rm web1

[root@vms103 ~]# ctr c list

CONTAINER    IMAGE    RUNTIME

[root@vms103 ~]#

总体来说containerd 客户端使用起来的体验感比docker差了很多,虽说k8s在1.23版本将从kubelet中移除dockershim,但是我们仍然可以用docker构建镜像、搭建私有仓库等。

下节将会讲解如何在k8s中使用containerd。

相关新闻

                                                                                                                                    RHCE9学习指南全部更新完成,点击阅读