docker save 是什么
docker save 把镜像连同全部层与元数据导出成一个 tar 文件,可以在没有外网的环境重新导入使用。它和 docker export 是两件事:export 导出的是容器文件系统快照,丢掉镜像的层信息、标签与历史,导入后只是一个单层镜像;save 导出的文件用 docker load 导入后能得到几乎完全一致的镜像,是离线交付的标准做法。save 本身没有压缩参数,可以通过管道配合 gzip 减小体积。
基本信息
| 语法 | docker save -o app.tar 镜像[:tag],也可以直接输出到标准输出 |
|---|---|
| 内容 | 镜像全部层加标签与配置,可用 docker load 完整还原 |
| 对比 export | export 导出容器文件系统,没有层信息、标签与历史 |
| 压缩 | save 无压缩参数,可管道接 gzip 生成压缩包 |
| 导入 | docker load -i app.tar,或 zcat 后接 docker load |
典型使用场景
- 内网或隔离环境交付镜像,目标机器无法访问任何镜像仓库
- 跨机器搬运镜像做临时验证,避免为一次性操作搭一套仓库
- 归档某个版本镜像用于后续回滚,保留可验证的历史交付物
- 离线演示与培训环境,在无网条件下快速铺开完整环境
- 镜像仓库故障期间作为应急分发手段,把镜像送到各节点
导出与导入
导出与导入
docker save -o myapp-1.0.0.tar myapp:1.0.0
docker save myapp:1.0.0 | gzip > myapp-1.0.0.tar.gz # 管道压缩,节省传输体积
docker load -i myapp-1.0.0.tar # 目标机器导入
gzip -dc myapp-1.0.0.tar.gz | docker load # 压缩包直接导入
docker images myapp # 导入后核对镜像 ID 与标签是否一致save 与 export 对比
| 维度 | docker save | docker export |
|---|---|---|
| 作用对象 | 镜像 | 容器 |
| 导出内容 | 全部层、标签与配置 | 容器文件系统快照 |
| 导入命令 | docker load | docker import,得到单层镜像 |
| 是否保留标签 | 保留 | 不保留,需要手工重新打标 |
| 典型用途 | 离线交付、镜像搬运 | 提取根文件系统用于分析 |
离线环境常用的交付方式是『save 导出传输 + load 导入』;镜像体积很大时先做精简(多阶段构建、裁剪依赖与构建缓存)再导出,传输和导入都更快。
导出的 tar 包含镜像的全部层与原始文件:如果构建过程中曾写入密钥或敏感配置,导出文件会一并带出,交付或外发前先确认镜像本身已经清理干净。