一次导出多个镜像
docker save 可以接受多个镜像引用,把它们写进同一个 tar 归档,归档里保留每个镜像的名称、标签与分层历史。目标机执行 docker load -i 即可一次性得到全部镜像与标签,省掉多次传输与逐包核对,常用于内网交付「应用镜像 + 数据库镜像 + 缓存镜像」这类固定组合。它是 Docker CLI 的通用能力,Linux 与 Docker Desktop 都支持;归档内容与操作系统无关,只与镜像自身的目标架构有关。
基本信息
| 语法 | docker save -o 归档.tar 镜像1 镜像2 … |
|---|---|
| 输出 | 默认打到标准输出,-o 指定写文件 |
| 还原 | docker load -i 归档.tar |
| 前提 | 本地已有全部镜像,磁盘余量足够 |
典型使用场景
- 离线交付整套环境:应用镜像与依赖的数据库、缓存镜像一起打包,目标机一次 load 就齐
- 给测试环境留档:把某次验证通过的镜像组合固化下来,方便复现当时的版本组合
- 镜像仓库不可达时的应急通道:从本地已有镜像导出成介质,搬到另一台机器使用
- 迁移镜像仓库前的搬运:把要保留的多个镜像合并导出,避免逐个传输与反复核对
- 交付验收留证:归档与校验值一起交给对方,作为该批次的版本凭证
合并导出与还原
合并导出与还原
# 一次导出三个镜像到一个归档
docker save -o bundle.tar app/web:1.0 postgres:16-alpine redis:7-alpine
# 大镜像先确认磁盘空间是否够用
docker system df
# 目标机导入,归档内的名称与标签原样恢复
docker load -i bundle.tar
# 核对导入结果与平台架构
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}'
docker image inspect postgres:16-alpine --format '{{.Architecture}}/{{.Os}}'写法与注意点
| 写法 | 作用 | 注意 |
|---|---|---|
| -o 归档文件 | 把归档写入指定文件 | 省略 -o 时输出到标准输出,用重定向写法要另外生成校验值 |
| 镜像列表 | 按命令行顺序写入同一归档 | 归档体积近似各镜像之和,复用共享层的镜像不会成倍膨胀 |
| docker load -i | 按归档内的名称与标签还原 | 目标机已有同名同标签时以导入内容覆盖,属预期行为 |
合并归档只减少传输次数,不解决架构差异:源机导出的 amd64 镜像在 arm64 机器上仍不能直接运行,跨架构交付需要在源端分别构建对应平台的镜像。
只导出不含父层的镜像时可用 docker save 的 --platform 指定平台变体,老版本 CLI 无此参数,脚本里要按目标环境确认可用性。