标签(空格分隔):containerd 系列


一:containerd 的容器数据持久化存储

实现把宿主机目录挂载至Containerd容器中,实现容器数据持久化存储
ctr container create docker.io/library/busybox:latest busybox3 --mount type=bind,src=/tmp,dst=/hostdir,options=rbind:rw

说明:
创建一个静态容器,实现宿主机目录与容器挂载
src=/tmp 为宿主机目录
dst=/hostdir 为容器中目录

ctr task start -d busybox3  # 启动

ctr tasks exec --exec-id $RANDOM -t busybox3 sh # 进入查看

image.png

向容器中挂载目录中添加文件
/ # echo "hello world" > /hostdir/test.txt

退出容器
/ # exit

在宿主机上查看被容器挂载的目录中是否添加了新的文件,已添加表明被容器挂载成功,并可以读写此目录中内容。
[root@flyfishsrvs01 ~]# cat /tmp/test.txt
hello world

image.png

二:与其它Containerd容器共享命名空间

当需要与其它Containerd管理的容器共享命名空间时,可使用如下方法。
# ctr tasks ls
TASK        PID      STATUS
nginx1      9823     RUNNING
busybox     15996    RUNNING
busybox3    16610    RUNNING
# ctr container create --with-ns "pid:/proc/16610/ns/pid" docker.io/library/busybox:latest busybox4
# ctr tasks start -d busybox4 bash
# ctr tasks exec --exec-id $RANDOM -t busybox3 sh

image.png
image.png

三:Docker集成Containerd实现容器管理

目前Containerd主要任务还在于解决容器运行时的问题,对于其周边生态还不完善,
所以可以借助Docker结合Containerd来实现Docker完整的功能应用。

3.1 安装docker-ce

准备Docker安装YUM源
# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker-ce
# yum -y install docker-ce

修改Docker服务文件,以便使用已安装的containerd。
# vim /usr/lib/systemd/system/docker.service

修改前:
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 此处
ExecReload=/bin/kill -s HUP $MAINPID

修改后:

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --containerd  /run/containerd/containerd.sock --debug 此处
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

image.png

设置docker daemon启动并设置其开机自启动
# systemctl daemon-reload
# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
# systemctl start docker

image.png

3.2 containerd 与 docker 的 集成验证

使用docker运行容器
# docker run -d nginx:latest
使用docker ps命令查看正在运行的容器
# docker ps

image.png

使用ctr查看是否添加一个新的namespace,本案例中发现添加一个moby命名空间,即为docker使用的命名空间。
# ctr namespace ls
# 查看moby命名空间,发现使用docker run运行的容器包含在其中。
# ctr -n moby container ls
使用ctr能够查看到一个正在运行的容器,既表示docker run运行的容器是被containerd管理的。
# ctr -n moby tasks ls

image.png

使用docker stop停止且使用docker rm删除容器后再观察,发现容器被删除。
# docker stop 0d8c1a1923fc
# docker rm 0d8c1a1923fc
0d8c1a1923fc
0d8c1a1923fc
# ctr -n moby container ls
CONTAINER    IMAGE    RUNTIME

# ctr -n moby tasks ls
TASK    PID    STATUS

image.png