VPS服务器Docker迁移Containerd平滑指南
在VPS服务器的日常运维中,从Docker(流行的容器平台)迁移到更轻量的Containerd(轻量级容器运行时)是常见需求。前者功能全面但资源占用较高,后者更适合对性能敏感的场景。本文将手把手带你完成迁移,避开关键坑点,确保业务零中断。

迁移前:先做三件事
迁移前务必完成三项准备:
1. 系统兼容性检查:不同系统对Containerd版本要求不同。例如Ubuntu 20.04建议用containerd 1.4.x,22.04推荐1.6.x以上(可通过`lsb_release -a`查看系统版本)。
2. 数据备份:Docker中的镜像和容器配置是业务核心。用以下命令备份所有镜像:
docker save -o all_images.tar $(docker images -q)
(`docker save`会将镜像打包为all_images.tar文件,存放在当前目录)
3. 停止业务容器:迁移期间业务会短暂中断,需提前通知用户或切换至备用环境。
安装Containerd:以Ubuntu为例
Ubuntu系统安装步骤简单,命令如下:
sudo apt-get update && sudo apt-get install -y containerd
安装后需初始化配置。Containerd的核心配置文件是`/etc/containerd/config.toml`,用以下命令生成默认配置:
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
(若需自定义参数,如调整镜像仓库地址,可手动编辑此文件)
停Docker+导镜像:避免冲突
安装完成后,必须停止Docker服务防止端口冲突:
sudo systemctl stop docker
接着将备份的镜像导入Containerd。这里需注意,Containerd默认命名空间是`k8s.io`(Kubernetes场景),命令如下:
ctr -n k8s.io image import all_images.tar
(`ctr`是Containerd的命令行工具,`-n`指定命名空间,导入后镜像会存储在Containerd的本地仓库)
K8s用户:修改kubelet配置
若VPS服务器运行Kubernetes(容器编排工具),需让kubelet(节点代理)识别Containerd。编辑kubelet服务文件(通常在`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf`),添加以下配置:
[Service]
Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
保存后重启kubelet生效:
sudo systemctl daemon-reload && sudo systemctl restart kubelet
避坑指南:这三个问题最常见
- 版本不兼容:曾遇到用户在CentOS 7安装containerd 1.6.x导致启动失败,原因是系统glibc版本过低。解决方法:参考官方文档(如containerd.io/docs)匹配系统与版本。
- 配置文件错误:有次迁移后容器无法拉取镜像,检查发现`config.toml`中`sandbox_image`(Pause镜像地址)未更新为国内源。建议替换为`registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8`等国内镜像。
- 数据迁移遗漏:某用户仅备份了镜像,未备份`/var/lib/docker/volumes`中的数据卷,导致业务启动后数据丢失。务必用`docker volume ls`列出所有卷,手动复制到`/var/lib/containerd`对应路径。
最后一步:验证迁移成功
用以下命令创建一个Nginx容器测试:
ctr run --rm -t docker.io/library/nginx:latest nginx-test
(`--rm`表示退出后自动删除容器,`-t`分配终端查看日志)
若终端输出Nginx启动日志,且通过`curl http://localhost`能访问到欢迎页,说明迁移成功。此时可删除Docker相关包释放空间:
sudo apt-get purge -y docker docker-engine docker.io containerd runc
整个迁移过程需关注系统兼容性、数据完整性和配置准确性。掌握这些步骤后,即使是VPS服务器的新手运维,也能高效完成从Docker到Containerd的平滑切换。