一.Containerd概述
1.什么是Containerd
Containerd (container Daemon)是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为一个独立的项目,被纳入了Cloud Native Computing Foundation(CNCF)的孵化项目中。
以下是containerd的主要特点和功能:
- 容器生命周期管理:containerd管理容器的生命周期,包括容器的创建、运行、暂停、恢复、停止和销毁等操作。
- 标准化接口:containerd提供了一个标准化的容器运行时接口,使得它可以与多个容器编排系统和工具集成,例如Kubernetes、Docker Compose等。
- 镜像管理:它支持容器镜像的拉取、推送、保存和加载等操作。containerd使用OCI (Open container Initiative)规范定义容器镜像的格式。
- 插件体系结构:containerd具有可扩展的插件体系结构,允许用户通过插件来扩展其功能,例如存储驱动、网络插件等。
- 跨平台支持:containerd可以在不同的操作系统上运行,从而提供了跨平台的支持。
- 与Kubernetes集成:Containerd作为Kubernetes的默认容器运行时,与Kubernetes紧密集成,为容器工作负载的管理提供了良好的支持。
- 安全性和隔离:containerd实现了严格的容器隔离和安全性措施,确保容器之间的隔离性以及对主机系统的安全性。
2.Containerd的起源与背景
containerd的起源可以追溯到Docker项目。Docker最初作为一个开源项目推出,旨在简化应用程序的打包、分发和部署过程。Docker引入了容器的概念,将应用程序和其依赖项打包到一个容器中,使得应用在不同环境中可以一致地运行。
随着Docker的发展,其架构逐渐变得复杂,包含了许多功能,如镜像构建、服务编排等。为了更好地组织和管理这些功能,Docker团队决定将Docker引擎拆分成多个组件,其中一个关键的组件就是 Containerdo
Docker架构拆分:Docker从单一的大型引擎拆分为一系列小型、可复用的组件。这种拆分的目标是提高可维护性、模块化和可扩展性。
containerd作为核心运行时:在Docker架构拆分后,containerd被定位为Docker的核心容器运行时。它负责管理容器的生命周期、镜像操作和基本运行时功能。
贡献给CNCF:为了推动containerd的发展,Docker团队将containerd的代码捐赠给了 Cloud Native Computing Foundation (CNCF),使其成为CNCF的孵化项目。
容器生态系统的标准化:containerd的设计遵循Open container Initiative(开放容器倡议 OCI)规范,这是一个关注容器运行时和镜像格式标准化的开放标准组织。这意味着containerd可以与符合OCI规范的其他容器工具和运行时进行互操作。
独立的容器运行时:containerd不仅仅局限于Docker,它可以作为独立的容器运行时,与多个容器编排系统和工具集成,从而为用户提供更多选择。
总体而言,containerd的起源是为了简化容器运行时的管理,并为容器生态系统提供一个开放、标准化的基础。其发展不仅服务于Docker生态系统,还为整个容器领域提供了一个通用的、可扩展的容器运行时。
3.核心组件解析
(1)storage(存储)
content(内容)
功能:content存储了容器镜像的实际数据。这包括文件系统层和元数据,用于创建和管理容器的基础文件系统。
Snapshot(快照)
功能. snapshot存储容器的快照数据。每个容器都可以有一个或多个快照,允许它们共享相同的文件系统层,提高效率。
Diff(差异)
功能:Diff存储容器文件系统层之间的差异。当容器运行时需要修改文件系统时,会在己有的文件系统层上创建一个差异层,以保存变更。
(2)Metadata(元数据)
Images(镜像)
功能:Images存储容器镜像的元数据,包括镜像的标签、大小、创建时间等信息。Metadata中的Images 组件允许容器对镜像进行管理和操作。
Containers(容器)
功能:containers存储容器的元数据,包括容器的状态、配置信息、网络设置等。这部分元数据使得容器能够有效地管理容器的生命周期。
(3)Runtime(运行时)
Tasks(任务)
Tasks包含容器内的进程组。每个容器运行时都有关联的Task,它负责管理容器内的所有进程。
Tasks与Shim一起工作,维护容器的状态。
Events(事件)
功能. Events组件记录了容器的各种事件,如容器的创建、启动、停止等。这些事件可以用于监控和日志记录,帮助用户了解容器系统的运行状况。
二.Containerd基本操作
1.镜像类操作
(1)拉取镜像
[root@localhost ~] ctr images pull hub.atomgit. com/amd64/nginx: 1.25.2-perl
(2)查看镜像
[root@localhost ~] ctr images ls
(3)监测本地镜像
[root@localhost ~] ctr images check
(4)重新打标签
[root@localhost ~] ctr images tag 原镜像名 新镜像名
(5)删除镜像
[root@localhost ~] ctr images rm 镜像名
(6)挂载镜像到主机目录
ctr images mount 镜像名:TAG 要挂载的目录/挂载点
(7)取消挂载
ctr images unmount 挂载点
(8)导出镜像
ctr images export --all-platforms 导出后的文件名 镜像名
(9)导入镜像
ctr images import 文件名
2.容器类操作
(1)创建容器
ctr containers create 镜像名 容器名
(2)查看容器的详细信息
ctr containers info 容器名
(3)删除容器
ctr containers rm 容器名
3.任务类操作
(1)启动容器任务
ctr task start -d 镜像名
(2)查看容器任务
ctr task ls
(3)进入容器里面
ctr task exec --extc-id 0 -t nginx sh //--exec-id 可以随便写不重复即可
(4)暂停容器任务
ctr task pause 容器名
(5)恢复容器
ctr task resume 容器名
(6)杀死容器任务
ctr task kill 容器名
(7)删除容器任务
ctr task rm 容器名
//虽然已经删除了任务,但是在创建任务时,也创建了一个同名的快照,即便已经删除了任务也可使用“ctr task start -d 容器名”命令,利用此快照将已删除的任务启动起来,使得此容器恢复运行
(8)获取容器的内存、CPU和PID的限额与使用量
ctr task metrics 容器名
(9)查看所有进程在宿主机的PID
ctr task ps 容器名
(10)列出当前所有插件
ctr plugins ls
(11)查看所有命名空间
ctr ns ls
(12)创建命名空间
ctr ns create 命名空间名称
(13)删除命名空间
ctr ns rm 命名空间名称
在操作时通过-n来指定命名空间,不指定则在默认命名空间default中操作