容器跨服务器迁移实战:打包、传输、加载,三步搞定!
容器跨服务器迁移实战:打包、传输、加载,三步搞定!
从开发环境到生产环境,容器还能这样“搬家”?
你有没有遇到过这种情况:
在本地调试好的容器,想部署到云服务器上?
或者需要把容器镜像从一个内网机器转移到另一个隔离环境?
别慌!今天用一个真实案例,带你走通完整流程:从容器打包 → 保存为文件 → 跨服务器传输 → 加载运行,全程命令解析 + 通俗讲解。
一、场景背景 🎯
假设你在本地(开发机)有一个运行了 Web 应用的容器,名叫 zdja-web,经过测试一切正常。
现在需要把它迁移到一台 IP 为 192.168.0.47 的远程服务器上(SSH 端口为 10022)。
迁移步骤分为四步:
- 把容器保存为镜像
(
docker commit) - 把镜像导出为 tar 文件
(
docker save) - 用 scp 把 tar 文件传到目标服务器
- 在目标服务器上加载 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→ 镜像变回容器
学会这套流程,你就能自由地在任何服务器之间迁移应用了!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)