用docker save一次传入多个镜像名可合并打包为单个tar文件,确保依赖关系完整;支持筛选命令动态生成镜像列表、加引号处理特殊字符、管道压缩节省体积,并可用docker load直接加载验证。
直接用 docker save 一次传入多个镜像名,就能把它们合并打包进同一个 tar 文件——这是最常用、最稳妥的同步打包方式,不需要额外脚本或中间步骤。
关联业务镜像通常有共同特征,比如相同前缀、同一仓库名,或属于同一项目。先用 docker images 筛出它们,确保不漏、不混:
api- 前缀的镜像:docker images | awk '$1 ~ /^api-/ {print $1 ":" $2}'
myapp):docker images myapp --format "{{.Repository}}:{{.Tag}}"
echo "abc123 def456 ghi789"
这是“同步打包”的核心操作:所有镜像层和元数据被打包进一个归档,加载时自动还原全部镜像及原始标签,保证业务镜像间依赖关系完整保留。
-o 明确输出路径):docker save -o business-images.tar api-gateway:1.2 nginx:alpine redis:7.2
docker save -o business.tar $(docker images | awk '$1 ~ /^api-/ || $1 ~ /^db-/ {print $1 ":" $2}')
docker save -o full-bundle.tar "api/auth:v2" "db/postgres:15"
如果用于离线分发或带宽受限环境,直接管道压缩,不生成中间文件:
docker save api-gateway:1.2 db/postgres:15 | gzip > business.tgz
docker save api-gateway:1.2 db/postgres:15 | zstd -T0 -o business.zst
注意:压缩后仍可用 docker load < business.tgz 直接加载,Docker 自动识别格式。
打包完成后建议快速验证,避免传输或加载失败:
tar -tf business-images.tar | head -n 5
docker load -i business-images.tar 或 docker load < business.tgz
docker images | grep -E "(api|db)"
只要源镜像存在且未被删除,导出包就包含全部层和配置,加载后完全等价于原环境中的镜像状态。