docker save 是什么
save 把本地镜像导出成一个 tar 归档,归档里包含全部层、标签与镜像配置,相当于把镜像完整打包带走。它的典型用途是跨网络分发:外网机器 pull 之后 save,把文件拷进内网再 load。与之对应的 import/export 走的是另一条路线——export 只导出容器当前的扁平文件系统,丢弃分层与配置。要搬运镜像本体,认准 save 与 load 这一对。
基本信息
| 语法 | docker save -o 文件.tar 镜像[:标签] [更多镜像…] |
|---|---|
| 管道用法 | docker save 镜像 | gzip > 文件.tar.gz |
| 还原命令 | docker load -i 文件.tar 或 docker load < 文件.tar |
| 保留内容 | 全部层、标签、镜像配置与构建历史 |
| 不保留内容 | 容器内的运行期改动、挂载卷里的数据 |
| 适用平台 | 所有 Docker 环境;跨架构搬运需目标节点架构匹配 |
典型使用场景
- 离线交付:把生产镜像打包带进没有外网的内网环境
- 临时分发:在没有私有仓库的现场快速传递镜像
- 备份关键版本:发布前留一份归档,便于回滚
- 迁移整套环境:多个镜像一次导出,目标机批量 load
- 排障对照:把出问题的镜像归档交给他人复现
导出与还原
导出与还原
# 导出单个镜像到文件
docker save -o app-web-1.0.tar app/web:1.0
# 直接压缩,传输体积明显减小
docker save app/web:1.0 | gzip > app-web-1.0.tar.gz
# 一次导出多个镜像(每个镜像可带多个标签,全部保留在归档里)
docker save -o bundle.tar app/web:1.0 app/api:1.4.2
# 目标机器还原:load 会恢复标签,无需再打标签
docker load -i app-web-1.0.tar
gunzip -c app-web-1.0.tar.gz | docker load
# 校验搬运结果:比对镜像 ID 与导出源是否一致
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}} {{.Size}}'save 与 export 对比
| 维度 | docker save | docker export |
|---|---|---|
| 对象 | 本地镜像 | 容器文件系统 |
| 分层 | 保留全部层与历史 | 压平为单层快照 |
| 标签与配置 | 保留 | 不保留 |
| 还原命令 | docker load | docker import |
| 卷数据 | 不含 | 不含 |
| 典型用途 | 镜像分发与备份 | 旧式根文件系统迁移 |
归档体积接近镜像解压后的总大小,导出前确认目标盘余量;网络传输后建议先在干净环境 load 并运行一次,避免搬运损坏在交付现场才发现。
save 只搬运镜像,运行期数据在卷里不会被带走。迁移整套服务时,数据库等有状态数据要单独做备份与还原。