Containerd基础

  1. containerd和docker之间的关系

docker包含containerd,containerd专注于容器运行时的容器管理。而docker除了容器管理之外还可以完成镜像构建之类的功能。

containerd提供API偏底层,不是给普通用户直接用的,容器编排的开发者才需要containerd。

  1. containerd在容器生态中扮演的角色

containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如kubernetes等容器编排系统。

containerd以daemon 守护进程的形式运行在系统上,通过unix domain socket暴露底层的grpc API,上层系统可以通过这些API管理机器上的容器。

k8s弃用docker做为容器运行时,而使用containerd,

image-20230708143100417

image-20230708143802162

安装和配置

安装

安装yum-utils工具

1
yum install yum-utils -y

安装docker-ce源

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装containerd

1
yum install containerd -y

初始化

1
2
3
ontainerd config default > /etc/containerd/config.toml

systemctl enable --now containerd

把生成的配置文件中 sandbox_image = “registry.k8s.io/pause:3.6” 改为国内的镜像源。

sandbox_image = “registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2”

1
2
3
4
5
# 重启containerd
systemctl restart containerd

# 拉取镜像
ctr images pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2

容器相关操作

注:操作docker的命令行工具是docker,操作containerd的命令行工具时ctr

  • 查看containerd命令空间 ctr namespace ls

ctr有命名空间namespace来指定类似于工作空间的隔离区域,使用ctr -n default images ls来查看default命名空间的镜像,不加-n参数,默认也是使用的default的命名空间。

  • 查看默认名称空间镜像有哪些 ctr image ls

  • 查看k8s命名空间下的镜像 ctr -n k8s.io images ls

  • 拉取busybox镜像

    ctr image pull docker.io/library/busybox:latest

    注:必须全路径,从dockerhub上下载默认busybox镜像。

  • 删除镜像 ctr images rm

  • 压缩镜像 ctr images export busybox.tar.gz docker.io/library/busybox:latest

  • 导出镜像 ctr images import 文件名

docker的镜像和containerd镜像是通用的,docker save -o 生成的镜像文件可以基于ctr images import 导出来。

基于containerd运行一个容器

这里要解释一个概念,containers和task,在docker里面container概念被弱化,将containers和task整合在一起,基于docker run可以运行容器。

ctr中 containers是镜像实例化的一个虚拟环境,提供一个磁盘,模拟空间,就好比你电脑处于关机状态一样。

​ ctr中tasks是将容器运行起来,电脑开机了,初始化进程等,task就是这么个形式。

  • 创建task运行容器
1
2
3
4
[root@localhost ~]# ctr run -d docker.io/library/busybox:latest busybox-1
[root@localhost ~]# ctr task ls
TASK PID STATUS
busybox-1 9441 RUNNING
  • 进入容器
1
[root@localhost ~]# ctr task exec --exec-id 9441 -t busybox-1 sh
  • 删除task
1
ctr task rm -f busybox-1
  • 删除容器
1
2
3
4
5
6
[root@localhost ~]# ctr c ls
CONTAINER IMAGE RUNTIME
busybox-1 docker.io/library/busybox:latest io.containerd.runc.v2
[root@localhost ~]# ctr c rm busybox-1
[root@localhost ~]# ctr c ls
CONTAINER IMAGE RUNTIME
  • 查看帮助命令
1
2
ctr --help
ctr task --help

扩展

image-20230708161821027

查看容器 ctr c ls

停止容器:停止容器之前需要先停掉容器的task

停掉task ctr tasks kill –signal 9 容器名称

ctr c delete 容器名称

image-20230708162927018

docker build可以构建镜像

ctr命令无法构建镜像