containerd
2025/7/20大约 3 分钟
介绍
相关信息
containerd 是一个用于运行和管理容器的行业标准容器运行时,专注于提供轻量级、高性能的容器执行环境。它是 CNCF(云原生计算基金会)的毕业项目,被广泛应用于 Kubernetes、Docker 等容器平台中。
核心功能
- 容器生命周期管理:创建、启动、停止、删除容器。
- 镜像管理:拉取、存储和分发容器镜像。
- 资源隔离:利用 Linux 内核特性(如 cgroups、namespaces)实现资源隔离。
- 网络和存储:支持多种网络和存储插件,提供灵活的容器环境配置。
- 插件架构:通过 CRI(容器运行时接口)与 Kubernetes 等上层系统集成。
架构设计
containerd 采用分层架构,主要组件包括:
- 守护进程(containerd):核心服务,管理容器生命周期。
- Shim:每个容器的轻量级进程,负责隔离容器与主守护进程。
- Runtime:底层运行时(如 runc),负责实际执行容器。
- Content Store:存储镜像内容和元数据。
- Snapshot Store:管理容器文件系统快照。
优势
- 轻量级:资源占用少,启动速度快。
- 稳定性:分离容器管理和执行,降低单点故障风险。
- 可扩展性:支持多种插件和运行时(如 gVisor、kata-containers)。
- 云原生兼容:专为 Kubernetes 等云原生环境设计。
与其他技术的关系
- 与 Docker 的关系:Docker 在 1.11 版本后采用 containerd 作为底层运行时,containerd 成为 Docker 容器执行的核心组件。
- 与 Kubernetes 的关系:Kubernetes 通过 CRI 接口与 containerd 直接通信,无需依赖 Docker。
- 与 runc 的关系:containerd 使用 runc 作为默认的底层容器运行时,负责容器的实际创建和执行。
常用命令
相关信息
命令分类 | 命令格式 | 功能描述 |
---|---|---|
镜像管理 | ctr images pull [镜像地址] | 从镜像仓库拉取镜像(例如:ctr images pull docker.io/library/nginx:alpine ) |
ctr images push [镜像地址] | 将镜像推送到远程仓库 | |
ctr images ls | 列出本地所有镜像 | |
ctr images rm [镜像名称/ID] | 删除本地镜像 | |
ctr images tag [源镜像] [目标镜像] | 为镜像添加标签 | |
容器管理 | ctr containers create [镜像] [容器名] | 创建容器但不启动(例如:ctr containers create docker.io/library/nginx:alpine my-nginx ) |
ctr containers ls | 列出所有容器(包括未运行的) | |
ctr containers rm [容器名/ID] | 删除容器(需先停止) | |
任务管理 | ctr tasks start -d [容器名] | 后台启动已创建的容器 |
ctr tasks start [容器名] | 前台启动容器(输出日志到终端) | |
ctr tasks ls | 列出运行中的容器 | |
ctr tasks kill [信号] [容器名] | 向容器发送信号(默认 SIGTERM,例如:ctr tasks kill -s SIGKILL my-nginx ) | |
ctr tasks exec --tty --exec-id [ID] [容器名] [命令] | 在运行的容器中执行命令(例如:ctr tasks exec --tty --exec-id exec0 my-nginx sh ) | |
快照管理 | ctr snapshots ls | 列出所有快照 |
ctr snapshots rm [快照名] | 删除快照 | |
命名空间管理 | ctr namespaces create [命名空间名] | 创建命名空间 |
ctr namespaces ls | 列出所有命名空间 | |
ctr namespaces rm [命名空间名] | 删除命名空间 | |
其他 | ctr version | 查看 containerd 版本信息 |
ctr plugins ls | 列出所有插件 | |
ctr events | 查看 containerd 事件流 |
说明:
- 命名空间:containerd 使用命名空间隔离资源(默认命名空间为
default
)。 - 任务(Tasks):containerd 中,每个容器的运行实例称为一个任务。
- 快照:用于管理容器文件系统的层。
- 常用选项:
-d
:后台运行--rm
:容器退出后自动删除--net-host
:使用主机网络--mount
:挂载卷
高级用法示例:
# 创建带环境变量的容器
ctr containers create --env HTTP_PROXY=http://proxy.example.com:8080 \
docker.io/library/alpine:latest my-alpine
# 使用主机网络
ctr containers create --net-host docker.io/library/nginx:alpine my-nginx
# 挂载主机目录
ctr containers create --mount type=bind,src=/host/data,dst=/data,options=rbind:rw \
docker.io/library/alpine:latest my-alpine