标签(空格分隔):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 # 进入查看
向容器中挂载目录中添加文件
/ # echo "hello world" > /hostdir/test.txt
退出容器
/ # exit
在宿主机上查看被容器挂载的目录中是否添加了新的文件,已添加表明被容器挂载成功,并可以读写此目录中内容。
[root@flyfishsrvs01 ~]# cat /tmp/test.txt
hello world
二:与其它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
三: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
设置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
3.2 containerd 与 docker 的 集成验证
使用docker运行容器
# docker run -d nginx:latest
使用docker ps命令查看正在运行的容器
# docker ps
使用ctr查看是否添加一个新的namespace,本案例中发现添加一个moby命名空间,即为docker使用的命名空间。
# ctr namespace ls
# 查看moby命名空间,发现使用docker run运行的容器包含在其中。
# ctr -n moby container ls
使用ctr能够查看到一个正在运行的容器,既表示docker run运行的容器是被containerd管理的。
# ctr -n moby tasks ls
使用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