容器跨服务器迁移实战:打包、传输、加载,三步搞定!

从开发环境到生产环境,容器还能这样“搬家”?

你有没有遇到过这种情况:
在本地调试好的容器,想部署到云服务器上?
或者需要把容器镜像从一个内网机器转移到另一个隔离环境?

别慌!今天用一个真实案例,带你走通完整流程:从容器打包 → 保存为文件 → 跨服务器传输 → 加载运行,全程命令解析 + 通俗讲解。


一、场景背景 🎯

假设你在本地(开发机)有一个运行了 Web 应用的容器,名叫 zdja-web,经过测试一切正常。
现在需要把它迁移到一台 IP 为 192.168.0.47 的远程服务器上(SSH 端口为 10022)。

迁移步骤分为四步:

  1. 把容器保存为镜像

    docker commit

  2. 把镜像导出为 tar 文件

    docker save

  3. 用 scp 把 tar 文件传到目标服务器
  4. 在目标服务器上加载 tar 文件为镜像

    docker load

下面我们一步步拆解。


二、步骤 1:将运行中的容器打包成镜像 📸

命令:docker commit 容器名 新镜像名:标签

容器本身是临时的,但你可以把它“拍照”保存成一个镜像。

docker commit zdja-web zdja-web:1.0

  • zdja-web

    :当前运行中的容器名称

  • zdja-web:1.0

    :生成的新镜像名称和版本号

执行后,用 docker images 就能看到这个新镜像。

为什么需要这一步?
因为 docker save 只能保存镜像,不能直接保存容器。所以先要把容器固化为镜像。

💡 如果你已经有现成的镜像(比如通过 docker build 生成的),可以跳过 docker commit,直接 docker save


三、步骤 2:将镜像导出为 tar 文件 🗃️

命令:docker save 镜像名 > 文件.tar 或 docker save 镜像名 -o 文件.tar

把镜像打包成一个文件,方便传输。

docker save zdja-web:1.0 > zdja-web.tar

或者用更规范的写法:

docker save zdja-web:1.0 -o zdja-web.tar

执行后,当前目录下会出现 zdja-web.tar 文件,这就是你要转移的“镜像包裹”。

🔍 小知识:docker save 保存的是镜像的完整分层结构,保留了所有历史记录。与之相对的是 docker export,它导出的是容器的快照(扁平文件系统,体积更小,但丢失分层和元数据)。跨服务器迁移镜像,请用 docker save


四、步骤 3:通过 scp 将 tar 文件拷贝到远程服务器 🚀

命令:scp -P 端口 本地文件 远程用户名@远程IP:目标目录

假设你的远程服务器 SSH 端口为 10022,用户名 root,IP 192.168.0.47,要传到 /data/ftp 目录。

scp -P 10022 zdja-web.tar root@192.168.0.47:/data/ftp

  • -P 10022

    :指定 SSH 端口(大写 P)

  • zdja-web.tar

    :本地文件名

  • root@192.168.0.47:/data/ftp

    :远程路径

输入服务器密码后,文件就会开始传输。如果配置了密钥免密登录,则会更方便。

💡 如果文件很大(比如几个 GB),可以考虑用 rsync 或 sz/rz,但 scp 是最简单的选择。


五、步骤 4:在目标服务器上加载镜像 🔄

命令:docker load -i 文件.tar 或 docker load < 文件.tar

登录到远程服务器,进入 /data/ftp 目录,加载 tar 文件。

cd /data/ftp
docker load -i zdja-web.tar

输出类似:

Loaded image: zdja-web:1.0

这时用 docker images 就能看到 zdja-web:1.0 镜像了。

最后一步:根据镜像启动容器

docker run -d --name myapp -p 8080:80 zdja-web:1.0

大功告成!✅


六、完整命令回顾(可复制) 📋

# 1. 本地:容器保存为镜像
docker commit zdja-web zdja-web:1.0

# 2. 本地:镜像导出为 tar 文件
docker save zdja-web:1.0 -o zdja-web.tar

# 3. 本地:传输 tar 到远程服务器(注意修改端口和路径)
scp -P 10022 zdja-web.tar root@192.168.0.47:/data/ftp

# 4. 远程服务器:加载 tar 为镜像
docker load -i /data/ftp/zdja-web.tar

# 5. 远程服务器:启动容器
docker run -d --name myapp -p 8080:80 zdja-web:1.0


七、总结:一条龙迁移流程图 🖼️

[正在运行的容器] 
    ↓ docker commit
[本地镜像]
    ↓ docker save
[本地 tar 文件]
    ↓ scp 传输
[远程 tar 文件]
    ↓ docker load
[远程镜像]
    ↓ docker run
[运行中的容器]

核心要点:

  • docker commit

     → 容器变镜像

  • docker save

     → 镜像变文件

  • scp

     → 文件飞过去

  • docker load

     → 文件变回镜像

  • docker run

     → 镜像变回容器

学会这套流程,你就能自由地在任何服务器之间迁移应用了!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐