因为docker不给用了,所以使用Containerd来代替
前置准备
安装 Containerd
# 安装 containerd
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io
# 生成默认配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml# 启动 containerd
systemctl start containerd
systemctl enable containerd
迁移步骤
1. 备份数据
# 创建备份目录
mkdir -p /backup/docker# 导出所有 Docker 镜像
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); dodocker save $image > "/backup/docker/${image//\//_}.tar"
done# 导出容器数据卷
docker run --rm --volumes-from <container_name> -v /backup/docker:/backup busybox tar cvf /backup/data.tar /data
2. 导入镜像到 Containerd
# 安装 nerdctl (Containerd 的命令行工具)
wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
tar xvf nerdctl-0.22.2-linux-amd64.tar.gz
mv nerdctl /usr/local/bin/# 导入镜像
for tar in /backup/docker/*.tar; doctr images import $tar
done
3. 运行容器配置
- 获取 Docker 容器配置:
# 导出容器配置
docker inspect <container_name> > container_config.json
- 创建对应的 Containerd 容器:
# 使用 nerdctl 创建容器,运行容器时只需要把平时用的docker run 换成nerdctl run就可以,参数和使用docker run基本一致
nerdctl run \--name <new_container_name> \--volume /path/to/data:/container/path \--network <network_name> \--env-file <env_file> \<image_name>
5. 验证
# 检查容器状态
nerdctl ps -a# 检查服务可用性
curl http://localhost:<port># 检查日志
nerdctl logs <container_name>
基础命令
1. 容器管理
# 运行容器
nerdctl run [选项] 镜像名 [命令]
# 示例:运行 Nginx
nerdctl run -d --name mynginx -p 80:80 nginx# 常用运行选项:
-d, --detach # 后台运行
-p, --publish # 端口映射
-v, --volume # 挂载数据卷
--name # 指定容器名
--rm # 容器停止后自动删除
-e, --env # 设置环境变量
--network # 指定网络
2. 容器操作
# 查看运行中的容器
nerdctl ps
# 查看所有容器(包括已停止的)
nerdctl ps -a# 启动/停止/重启容器
nerdctl start 容器名或ID
nerdctl stop 容器名或ID
nerdctl restart 容器名或ID# 删除容器
nerdctl rm 容器名或ID
# 强制删除运行中的容器
nerdctl rm -f 容器名或ID# 查看容器日志
nerdctl logs 容器名或ID
# 实时查看日志
nerdctl logs -f 容器名或ID# 进入容器
nerdctl exec -it 容器名或ID /bin/bash
3. 镜像管理
# 查看本地镜像
nerdctl images# 拉取镜像
nerdctl pull 镜像名:标签# 推送镜像到仓库
nerdctl push 镜像名:标签# 删除镜像
nerdctl rmi 镜像名:标签# 构建镜像
nerdctl build -t 镜像名:标签 .# 保存和加载镜像
nerdctl save 镜像名:标签 > image.tar
nerdctl load < image.tar
高级功能
1. 网络管理
# 查看网络列表
nerdctl network ls# 创建网络
nerdctl network create 网络名
# 示例:创建自定义网络
nerdctl network create mynetwork# 删除网络
nerdctl network rm 网络名# 连接容器到网络
nerdctl network connect 网络名 容器名# 断开容器与网络的连接
nerdctl network disconnect 网络名 容器名
2. 数据卷管理
# 查看数据卷
nerdctl volume ls# 创建数据卷
nerdctl volume create 卷名# 删除数据卷
nerdctl volume rm 卷名# 查看数据卷详情
nerdctl volume inspect 卷名
3. 容器资源限制
# 限制内存使用
nerdctl run -m 512m 镜像名# 限制 CPU 使用
nerdctl run --cpus 2 镜像名# 限制 CPU 份额
nerdctl run --cpu-shares 512 镜像名
4. 容器编排
# 使用 compose 启动服务
nerdctl compose up -d# 停止 compose 服务
nerdctl compose down# 查看 compose 服务状态
nerdctl compose ps
实用技巧
1. 容器监控
# 查看容器资源使用情况
nerdctl stats# 查看容器详细信息
nerdctl inspect 容器名或ID
2. 镜像管理技巧
# 清理未使用的镜像
nerdctl image prune# 清理所有未使用的资源
nerdctl system prune# 查看镜像历史
nerdctl history 镜像名:标签
3. 文件传输
# 从容器复制文件到主机
nerdctl cp 容器名:/容器内路径 主机路径# 从主机复制文件到容器
nerdctl cp 主机文件路径 容器名:/容器内路径
常见问题解决
- 容器无法访问网络:
# 检查网络配置
nerdctl inspect 容器名 | grep -i network
- 容器启动失败:
# 查看详细错误信息
nerdctl events
nerdctl logs 容器名
- 存储空间问题:
# 清理未使用的数据
nerdctl system prune -a --volumes