containerd的作用以及跟docker的区别
Containerd是一个用于管理容器生命周期的开源项目。它最初是从Docker项目中分离出来的,现在已经成为了一个独立的项目。它可以用作容器镜像管理工具和容器运行时。它具有以下主要作用:
-
帮助管理容器镜像。它可以下载,上传,删除容器镜像,并对镜像进行分类和标记。
-
负责容器的生命周期管理。它可以启动,停止和销毁容器,以及监控容器的运行状态。
-
安全性。Containerd对容器运行的安全性进行了加强。
相比之下,Docker是一个完整的容器解决方案,包括构建镜像和管理容器,而Containerd只是一个容器运行时和镜像管理工具。Docker可以轻松快速的构建、部署和管理应用程序和服务,而Containerd主要关注于运行容器的安全性和稳定性,更适合用于大规模生产环境。此外,Docker对开发人员和管理员的用户体验更为友好,而Containerd更加适合高级用户和专业人士的使用。
环境准备
系统:rocky9.1(可连接外网)
部署流程
1.安装下载工具
dnf -y install wget
2.获取阿里云yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装containerd
dnf -y install containerd.io
4.生成containerd配置文件
containerd config default > /etc/containerd/config.toml
5.编辑配置文件更改为国内镜像源
vim /etc/containerd/config.toml
61 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# 将61行"registry.k8s.io/pause:3.6" 改为"registry.aliyuncs.com/google_containers/pause:3.9"这里指定获取镜像的源为国内镜像源,如果为国外的镜像源可能无法获取镜像
125 SystemdCgroup = true
# 将125行“false”改为“true”这里允许使用SystemdCgroup控制组进行管理
6.立即启动containerd并加入自启
systemctl enable containerd.service --now
7.查看containerd是否部署成功
ctr images ls
containerd使用
1.拉取镜像
ctr i pull docker.io/library/nginx:{镜像版本号}
2.查看成功拉取的镜像
ctr i ls
3.导入镜像
ctr i import /root/{镜像名称}.tar
4.导出镜像
ctr i export {文件名}.tar docker.io/library/nginx:latest{镜像名称}
5.删除镜像
ctr i remove docker.io/library/nginx:latest
6.修改镜像tag
ctr images tag docker.io/library/nginx:latest nginx:latest
测试环节
1.拉取nginx镜像
ctr i pull docker.io/library/nginx:latest
2.创建容器
ctr c create docker.io/library/nginx:latest nginx
# 创建 指定镜像名 自定义的创建的的容器的名字
上面我们通过 container create 命令创建的容器,并没有处于运行状态,只是一个静态的容器。一个 container 对象只是包含了运行一个容器所需的资源及相关配置数据,表示 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程还没有启动。
一个容器真正运行起来是由 Task 任务实现的,Task 可以为容器设置网卡,还可以配置工具来对容器进行监控等。
Task 相关操作可以通过 ctr task 获取,如下我们通过 Task 来启动容器:
3.启动和查看镜像启动状态
ctr task start -d nginx
ctr task ls
![[Pasted image 20230608131618.png]]
4.查看已经创建的容器
ctr containerd ls
![[Pasted image 20230608131752.png]]
5.删除创建的容器
ctr c delete nginx
6.进入容器内的镜像
ctr task exec --exec-id 0 -t nginx /bin/bash
# -exec-id参数后面的值随便写,只要唯一就行 -t 指定镜像名字
7.暂停容器
ctr task pause nginx
# 暂停后状态变为PAUSED
8.恢复容器
ctr task resume nginx
9.杀死容器
ctr task kill nginx
ctr task rm nginx
# 杀死容器后,就无法再使用了,可以通过 rm 命令删除,containerd没有stop功能,只能暂停和杀死容器,杀死后状态为STOPPED
# 如果 ctr task kill nginx 命令没有杀死容器,也可以直接使用 kill -9 杀死容器的 PID 号,该方法也可杀死容器
kill -9 23792
10.重启容器
ctr task metrics nginx
请注意,不能仅通过重新启动镜像来恢复之前运行的应用程序状态,因为容器资源是临时性的,并在容器任务停止时被删除。要继续使用之前的容器状态,请备份和还原容器数据,或使用类似 Kubernetes 这样的编排工具来管理容器。
11.将镜像导出为压缩包
ctr i export nginx:latest.tar docker.io/library/nginx:latest
12.将压缩包导入containerd容器
ctr i import nginx:latest.tar
containerd支持命名空间的概念
Containerd 使用 Linux 命名空间来隔离容器和其资源。在 containerd 中,每个容器都有自己的命名空间,包括:
- PID 命名空间:确保每个容器内的进程只能看到自己的 PID 空间,从而防止冲突和干扰。
- Network 命名空间:将每个容器隔离到自己的网络命名空间中,从而允许容器拥有自己的网络配置、IP 地址和网络接口,避免了与主机系统的网络冲突。
- Mount 命名空间:允许每个容器有自己的文件系统视图和挂载点,而不会与其他容器或主机系统冲突。
- IPC 命名空间:确保容器内的进程只能与其自身及同一容器内的进程通信,从而保护容器内部的通信安全性。
使用命名空间隔离容器和其中的资源,提高了容器的安全性、稳定性和可靠性。它可以防止容器资源之间的冲突和干扰,并提供了额外的安全层,确保容器应用程序仅访问被授权的资源。同时,通过隔离容器的资源,可以使容器更加移植和可部署,因为它们不需要依赖于主机系统的配置和环境。
总体而言,命名空间是 containerd 实现轻量级虚拟化和容器化的重要功能,它使 containerd 可以创建和管理隔离的容器环境,提供了更高的应用程序安全性和可扩展性。
1.列举已有的命名空间
ctr ns ls
2.查看指定的命名空间底下的镜像
ctr -n default i ls
3.创建和删除命名空间
ctr ns create test
ctr ns rm test
containerd高级命令配置
Containerd 高级命令行工具 nerdctl - taotaozh - 博客园 (cnblogs.com)
标签:容器,在线,ctr,部署,containerd,nginx,镜像,docker From: https://www.cnblogs.com/xyc321/p/18200482