推荐直接用管道将docker save输出流交给压缩工具以避免中间文件:gzip适合通用场景,pigz利用多核加速,xz提供最高压缩比但耗时长,分步保存再压缩会占用大量磁盘且效率低。

直接用管道把 docker save 的输出流交给压缩工具,就能在保存的同时完成压缩,不产生中间大文件,效率高、空间省。
用 gzip 实现快速压缩(最常用)
gzip 压缩速度快、兼容性好,适合大多数传输和备份场景。命令写法简洁,直接通过管道完成:
- 压缩单个镜像:
docker save my-app:latest | gzip > my-app.tar.gz - 打包多个镜像再压缩:
docker save nginx:alpine redis:7 alpine:latest | gzip > multi-images.tar.gz - 加载时无需解压到磁盘:
zcat my-app.tar.gz | docker load或gunzip -c my-app.tar.gz | docker load
用 pigz 提升压缩速度(多核加速)
pigz 是 gzip 的并行版本,能充分利用多核 CPU,大幅缩短压缩时间,尤其适合大镜像或批量操作:
- 安装 pigz(如 Ubuntu):
apt-get install pigz - 使用示例:
docker save app:v2 | pigz -k -9 > app-v2.tar.gz
-k 表示保留原始文件名(虽此处无实际文件),-9 为最高压缩等级 - 加载方式与 gzip 完全一致,
zcat或gunzip -c都能正常读取
用 xz 获得极致压缩比(适合长期归档)
xz 压缩率明显高于 gzip 和 pigz,体积可减少 20%–40%,但耗时更长,适合对存储敏感、带宽受限或离线归档场景:
- 压缩命令:
docker save db:prod | xz -z -T0 -9 > db-prod.tar.xz
-T0 表示自动使用全部 CPU 核心,-9 为最高压缩级别 - 加载命令:
xz -d -c db-prod.tar.xz | docker load - 注意:xz 文件不能用
zcat,必须用xz -d -c或unxz -c
避免先保存再压缩(不推荐)
显式分两步(docker save -o image.tar xxx → gzip image.tar)看似直观,但有明显缺陷:
- 临时 tar 文件可能达数 GB,极易占满磁盘空间
- 需等待 save 完全写完才开始压缩,总耗时更长
- 无法流式处理,失去内存友好性和实时可控性


















