目前Kubernetes大部分工具安装的场景中,已经不为节点单独安装Docker。我们很多场景还是需要使用Docker,这里我们安装Docker来集成Containerd

> 本次模拟环境为Ubuntu 22.04

设置Docker源

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update


国内网络源

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


安装Docker

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


> 具体Docker安装可查阅官网https://docs.docker.com/engine/install/

**修改Docker配置文件**

编辑Docker启动文件

vim /usr/lib/systemd/system/docker.service

#修改前
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

#修改后
ExecStart=/usr/bin/dockerd --containerd  /run/containerd/containerd.sock --debug


完整配置文件如下

1751450042831.png

重启Docker

systemctl daemon-reload
systemctl restart docker


**验证效果**

运行nginx容器

root@k8s-master-01:~# docker run -d dockerproxy.frps.fun/library/nginx:latest


查看docker ps

root@k8s-master-01:~# docker ps
CONTAINER ID   IMAGE                                       COMMAND                  CREATED          STATUS         PORTS     NAMES
800d2d287d85   dockerproxy.frps.fun/library/nginx:latest   "/docker-entrypoint.…"   11 seconds ago   Up 9 seconds   80/tcp    hopeful_satoshi


ctr查看containerd是否添加一个新的namespace

root@k8s-master-01:~# ctr namespace ls
NAME   LABELS
k8s.io
moby


可以看到ctr里面的容器就是Docker ps查看到的

root@k8s-master-01:~#  ctr -n moby c ls
CONTAINER                                                           IMAGE    RUNTIME
800d2d287d85623269554ba27cd41a48ba514c73ba93eae506664e29e6f1205e    -        io.containerd.runc.v2

root@k8s-master-01:~# docker ps
CONTAINER ID   IMAGE                                       COMMAND                  CREATED              STATUS              PORTS     NAMES
800d2d287d85   dockerproxy.frps.fun/library/nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    hopeful_satoshi


此时Docker创建的容器就可以使用ctr进行管理,并且调用的是Containerd服务