温馨提示×

Docker在CentOS上的容器如何迁移

小樊
43
2025-12-05 13:17:06
栏目: 智能运维

Docker 在 CentOS 上的容器迁移指南

一、迁移方式总览与选择

  • 镜像导出/导入(docker save/load):适合保留镜像层与历史,便于跨主机、跨环境部署,推荐作为常规方式。
  • 容器导出/导入(docker export/import):将容器当前文件系统导出为镜像,导入后是“扁平镜像”,不会保留历史层、端口映射、环境变量、卷等运行态配置,适合一次性快照迁移。
  • 数据卷备份与恢复:容器/镜像迁移不包含数据卷,需单独备份与恢复(如 tar 打包挂载卷数据)。
  • Docker Compose:将应用及依赖(镜像、端口、卷、网络)以声明式文件管理,最利于复现与迁移。
  • 整库迁移(/var/lib/docker):直接拷贝 Docker 数据目录,风险高,仅在版本兼容且停机窗口充足时考虑。

二、标准流程 镜像导出导入(推荐)

  • 在源主机(CentOS)
    1. 查看并确认容器与镜像
      • 查看容器:docker ps -a
      • 查看镜像:docker images
    2. 若需从运行中容器生成新镜像:docker commit <容器ID或名> <镜像名>:<标签>
    3. 导出镜像:docker save -o <镜像名>.tar <镜像名>:<标签>
    4. 传输镜像包:scp <镜像名>.tar <目标主机>:/tmp/
  • 在目标主机(CentOS)
    1. 导入镜像:docker load -i /tmp/<镜像名>.tar
    2. 依据原容器参数启动(示例):
      • docker run -d --name <新容器名> -p <主机端口>:<容器端口> -v <卷名或宿主机路径>:<容器内路径> <镜像名>:<标签>
        说明:镜像方式便于在不同主机间复现一致的运行环境,且可配合卷单独迁移数据。

三、容器导出导入与数据卷迁移(export/import)

  • 容器导出/导入(不保留运行态配置)
    • 源主机:
      • 停止容器:docker stop <容器名>
      • 导出:docker export <容器名> | gzip > <容器名>.tar.gz
    • 目标主机:
      • 导入:zcat <容器名>.tar.gz | docker import - <镜像名>:<标签>
      • 启动:docker run -d --name <新容器名> <镜像名>:<标签>
    • 注意:此方法不会携带端口、环境变量、卷等配置,需要在启动时手动补齐。
  • 数据卷备份与恢复(关键数据单独迁移)
    • 备份卷(示例卷名为 my_volume):
      • docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
    • 将 backup.tar 传到目标主机后恢复:
      • 目标先创建同名卷:docker volume create my_volume
      • 恢复:docker run --rm -v my_volume:/data -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar -C /data
        说明:export/import 适合“快照式”迁移;任何持久化数据务必用卷单独备份与恢复。

四、批量迁移与编排迁移

  • 使用 Docker Compose(最利于复现与迁移)
    • 源主机生成 compose 文件(可从现有容器/镜像信息整理):
      • 示例 compose 片段:
        version: '3.8'
        services:
          web:
            image: myapp:latest
            ports:
              - "80:80"
            volumes:
              - my_volume:/data
        volumes:
          my_volume:
        
    • 将 compose 文件与镜像一并传到目标主机(镜像可用 docker save/load 预加载)
    • 目标主机启动:docker-compose up -d
      说明:Compose 将镜像、端口、卷、网络等收敛为一份可版本化的配置,适合多容器应用的一键迁移与复现。

五、注意事项与常见问题

  • 数据卷不会随镜像/容器迁移:务必单独备份与恢复卷数据(见第三部分)。
  • export 与 save 的差异:export 生成“扁平镜像”,丢失历史层与运行态配置;save/load 保留镜像层与历史,更适合迁移与复用。
  • 整库拷贝风险:直接迁移 /var/lib/docker 需停机、版本兼容、权限一致,失败影响大,非必要不建议采用。
  • 网络与端口:跨主机需确保目标端口未被占用,必要时调整 -p 映射;如使用自定义网络,需在目标主机重建同名网络。
  • 验证:迁移后执行 docker psdocker logs、业务自检,确认服务可用与数据完整。

0