Docker、containerd、CRI、CRI-O、OCI、runc傻傻分不清,到底有什么关系?

公众号:MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。
Docker、containerd、CRI、CRI-O、OCI、runc都是容器相关的技术或规范,很多人容易搞混了,今天我们来捋一捋它们之间的关系。

  1. Docker:Docker 是一个开源的容器化平台,可以创建、部署和运行容器应用程序。Docker 使用了自己的容器格式(Docker Image)和运行时(Docker Engine),并提供了一整套容器生态系统,包括 Docker Compose、Docker Swarm 等。
  2. containerd:containerd 是一个开源的容器运行时,可以管理和运行容器。它是 Docker 在 2016 年开源的一个组件,可以独立于 Docker 运行。Docker 默认使用 containerd 来管理容器。
  3. CRI:Container Runtime Interface,容器运行时接口,是 Kubernetes 容器管理器与容器运行时之间的接口,定义了 Kubernetes 如何与容器运行时通信,以便启动、停止和管理容器。
  4. CRI-O:CRI-O 是一个符合 CRI 规范的轻量级容器运行时,专门为 Kubernetes 设计。它是一个完全独立于 Docker 的项目,可以支持多种容器格式,如 OCI 和 Docker Image。
  5. OCI:Open Container Initiative,开放容器倡议,是一个开放组织,致力于创建容器格式和运行时的开放标准。OCI 标准化了容器镜像格式和运行时规范,使得不同厂商和组织可以共享相同的容器格式和运行时。
  6. runc:runc 是一个标准的、轻量级的容器运行时,实现了 OCI 容器运行时规范。runc 是 Docker 容器运行时的核心组件之一,也是其他容器平台(如 Kubernetes、CRI-O)的默认容器运行时。

综上所述,Docker 是一个完整的容器化平台,包括容器格式、运行时和生态系统;containerd 是 Docker 的一个组件,用于管理容器;CRI 定义了 Kubernetes 与容器运行时之间的接口;CRI-O 是符合 CRI 规范的轻量级容器运行时;OCI 定义了容器镜像格式和运行时规范;runc 实现了 OCI 容器运行时规范,是其他容器平台的默认容器运行时。

### CRI-O容器运行时的使用指南与配置示例 CRI-O 是一个专为 Kubernetes 设计的轻量级容器运行时实现,遵循 Open Container Initiative (OCI) 标准,并实现了 Kubernetes 容器运行时接口 (CRI)[^4]。以下是关于 CRI-O 的安装、配置使用的详细信息。 #### 1. 系统要求 在开始安装 CRI-O 之前,请确保系统满足以下最低要求: - 操作系统:支持的 Linux 发行版(如 CentOS、Ubuntu 等)。 - 内核版本:建议使用较新的内核版本以获得更好的兼容性安全性。 - 容器工具:需要安装 `runc` 或其他 OCI 兼容的运行时[^4]。 #### 2. 安装步骤 以下是 CRI-O 的安装步骤: ```bash # 更新系统包 sudo yum update -y # 安装必要的依赖项 sudo yum install -y \ git \ go \ make \ btrfs-progs-devel \ device-mapper-devel \ glib2-devel \ glibc-static \ libassuan-devel \ libseccomp-devel \ pigz # 克隆 CRI-O 项目代码 git clone https://gitcode.com/gh_mirrors/cr/cri-o /usr/src/cri-o # 进入项目目录并构建 cd /usr/src/cri-o make sudo make install ``` 完成上述步骤后,CRI-O 将被成功安装到系统中[^1]。 #### 3. 配置 CRI-O CRI-O 的主要配置文件位于 `/etc/crio/crio.conf`。可以通过编辑该文件来调整运行时的行为。以下是一些关键配置项: - **存储驱动**:默认使用 `overlay2` 文件系统作为存储驱动。如果需要更改,可以修改 `storage_driver` 参数。 - **镜像仓库**:通过 `image_pull_policy` 参数设置镜像拉取策略。 - **网络配置**:确保 CNI(Container Network Interface)插件已正确配置,通常使用 `flannel` 或 `calico`。 配置完成后,启动并启用 CRI-O 服务: ```bash sudo systemctl start crio sudo systemctl enable crio ``` #### 4. 使用 CRI-O 为了验证 CRI-O 是否正常工作,可以使用 `crictl` 工具进行测试。首先,确保 `crictl` 已正确安装并配置[^3]。 ```bash # 拉取测试镜像 crictl pull nginx:latest # 创建容器 container_id=$(crictl run --name my-nginx-container nginx:latest) # 查看运行中的容器 crictl ps # 停止容器 crictl stop $container_id # 删除容器 crictl rm $container_id ``` #### 5. 与 Kubernetes 集成 要将 CRI-O 与 Kubernetes 集成,需指定正确的 CRI 套接字路径。例如,在初始化 Kubernetes 集群时,可以通过以下命令指定 CRI-O 的套接字路径[^2]: ```bash kubeadm init --cri-socket=unix:///var/run/crio/crio.sock ``` 此外,还需确保 Kubernetes 的 Kubelet 配置文件中指定了正确的 CRI 套接字路径。 --- ### 示例代码 以下是一个简单的 CRI-O 配置文件示例: ```ini [crio] runtime = "runc" conmon = "/usr/libexec/crio/conmon" oci_hooks_spec_dir = "/etc/containers/oci/hooks.d" [crio.network] network_dir = "/etc/cni/net.d" plugin_dirs = ["/opt/cni/bin"] [crio.image] default_transport = "docker://" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MCNU云原生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值