自Kubernetes 1.24版本开始不在支持Docker,其实问题并没有那么大。Kubernetes只是不再直接支持docker-shim垫片,而是使用直接对接Docker中的ContainerD。 Docker从很早就开始剥离containerd以及runc组件,使之可以更好的融入开源社区。本篇文章将介绍containerd的一些基本使用命令。

ContainerD生态圈

architecture.png (1782×1080)

配置管理

# 生成配置文件
sudo containerd config default > /etc/containerd/config.toml

# 查看版本
sudo ctr version


# 启动服务
sudo systemctl start containerd

# 停止服务
sudo systemctl stop containerd

# 重启服务
sudo systemctl restart containerd

镜像管理


# 查看镜像
sudo ctr images ls 

# 下载镜像
sudo ctr images pull --all-platforms docker.io/library/nginx:alpine

# 镜像删除
sudo ctr images rm docker.io/library/nginx:alpine


# 挂载镜像
sudo ctr images mount docker.io/library/nginx:alpine /mnt

# 卸载镜像
sudo umount /mnt


# 镜像导出
sudo ctr images export --all-platforms nginx.img docker.io/library/nginx:alpine

# 镜像导入
sudo ctr images import nginx.img


# 修改tag
sudo ctr images tag docker.io/library/nginx:alpine nginx:alpine

# check
sudo ctr image check

容器管理

# 查看容器
sudo ctr containers ls 

# 查看任务, 可区分出动态容器
sudo ctr task ls


# 创建静态容器
sudo ctr containers create docker.io/library/nginx:alpine nginx1

# 查看容器信息
sudo ctr containers info nginx1

# 启动静态容器为动态容器
sudo ctr task start -d nginx1


# 查看容器内的进程
sudo ctr t ps nginx1

# 进入容器
sudo ctr t exec --exec-id $RANDOM -t nginx1 /bin/sh


# 创建动态容器, 其中--net-host是指host网络
sudo ctr run -d --net-host docker.io/library/nginx:alpine nginx1


# 暂停任务
sudo ctr t pause nginx1

# 恢复任务
sudo ctr t resume nginx1


# 停止任务
sudo ctr t kill nginx1

# 删除任务
sudo ctr t rm nginx1

# 删除容器
sudo ctr c rm nginx1

镜像仓库

配置镜像仓库主机名

vi /etc/hosts

192.168.0.165 harbor.stanleylog.com

修改ContainerD配置文件

vi /etc/containerd/config.toml

[plugins.cri.registry.mirrors."harbor.stanleylog.com"]
	endpoint = [
		"http://harbor.stanleylog.com"
	]
	
# 重启containerd
sudo systemctl restart containerd

操作命令

# 修改镜像名
sudo ctr i tag docker.io/library/nginx:alpine harbor.stanleylog.com/library/nginx:alpine

# 上传镜像
sudo ctr i push --platform linux/amd64 --plain-http -u admin:Harbor12345 harbor.stanleylog.com/library/nginx:alpine

# 下载镜像
sudo ctr i pull --plain-http harbor.stanleylog.com/library/nginx:alpine

命名空间

# 创建命名空间
sudo ctr namespace create kubemsb

# 删除命名空间
sudo ctr ns remove kubemsb

# 命名空间的使用
sudo ctr -n default i ls 
sudo ctr -n default c create docker.io/library/nginx:alpine