Docker 镜像迁移与离线部署实战指南
前言
在无法直接访问公共仓库的网络环境中,Docker镜像的离线部署成为常见需求。本文将详细介绍如何将Docker镜像导出为可传输文件,并在目标环境中成功部署。
镜像导出流程
步骤1:查询本地镜像
首先,确认需要导出的镜像信息:
docker images | grep myapp/service
示例输出:
myapp/service v2.3.1 789abc123def 3 days ago 245MB
步骤2:执行镜像导出
使用docker save命令将镜像保存为tar文件:
docker save -o myapp-service-v2.3.1.tar myapp/service:v2.3.1
参数说明:
-o:指定输出文件路径myapp/service:v2.3.1:完整镜像名称和标签
步骤3:验证导出文件
检查生成的镜像文件:
ls -lh myapp-service-v2.3.1.tar
# -rw-r--r-- 1 root root 245M Mar 15 14:30 myapp-service-v2.3.1.tar
步骤4:可选压缩处理
为减小传输体积,可使用gzip压缩:
docker save myapp/service:v2.3.1 | gzip > myapp-service-v2.3.1.tar.gz
压缩效果:
ls -lh myapp-service-v2.3.1.tar.gz
# -rw-r--r-- 1 root root 132M Mar 15 14:31 myapp-service-v2.3.1.tar.gz
镜像传输方法
根据网络环境选择合适的传输方式:
| 传输方式 | 命令示例 | 适用场景 |
|---|---|---|
| SCP | scp myapp-service-v2.3.1.tar user@192.168.1.50:/opt/ |
网络互通环境 |
| RSYNC | rsync -avz myapp-service-v2.3.1.tar user@目标IP:/opt/ |
大文件传输,支持断点续传 |
| 物理介质 | 通过U盘或移动硬盘拷贝 | 完全离线环境 |
镜像导入流程
步骤1:加载镜像文件
在目标机器上执行导入命令:
docker load -i myapp-service-v2.3.1.tar
参数说明:
-i:指定输入文件路径
步骤2:验证导入结果
检查镜像是否成功导入:
docker images | grep myapp/service
预期输出:
myapp/service v2.3.1 789abc123def 3 days ago 245MB
步骤3:处理压缩文件导入
如果是压缩后的镜像文件,需先解压再导入:
gunzip -c myapp-service-v2.3.1.tar.gz | docker load
批量镜像处理
批量导出多个镜像
将多个相关镜像打包到一个文件中:
docker save -o microservices.tar \
myapp/web:v1.2.0 \
myapp/api:v2.1.5 \
myapp/db:v3.0.0
批量导入镜像
一次性导入所有镜像:
docker load -i microservices.tar
常见问题解答
问题1:save与export命令的区别
| 对比项 | docker save | docker export |
|---|---|---|
| 操作对象 | 镜像 | 容器 |
| 数据完整性 | 包含完整历史层和元数据 | 仅包含文件系统快照 |
| 文件大小 | 较大 | 较小 |
| 适用场景 | 镜像迁移和分享 | 容器文件系统备份 |
问题2:导入后镜像标签丢失如何处理
若导入后镜像标签丢失,可手动添加:
docker tag 789abc123def myapp/service:v2.3.1
问题3:如何检查tar文件中的镜像信息
不解压查看镜像文件内容:
tar -tf myapp-service-v2.3.1.tar | grep manifest.json
命令速查表
| 操作场景 | 命令 |
|---|---|
| 导出单个镜像 | docker save -o 镜像文件.tar 镜像名:标签 |
| 导出多个镜像 | docker save -o 镜像文件.tar 镜像1 镜像2 镜像3 |
| 压缩导出 | docker save 镜像名:标签 | gzip > 镜像文件.tar.gz |
| 导入镜像 | docker load -i 镜像文件.tar |
| 压缩导入 | gunzip -c 镜像文件.tar.gz | docker load |
| 验证导入 | docker images | grep 镜像名 |
