1.9 KiB
1.9 KiB
下面是压缩Docker镜像为分块压缩包及合并的命令:
1. 压缩并分割镜像
推荐方式:直接通过管道压缩并分块
使用 gzip 压缩(速度快,中等压缩率):
docker save <IMAGE_NAME:TAG> | gzip | split -b 5G - image_part_.gz
或使用 xz 压缩(高压缩率,速度慢):
docker save <IMAGE_NAME:TAG> | xz -T0 | split -b 5G - image_part_.xz
参数说明:
<IMAGE_NAME:TAG>:替换为实际的镜像名称和标签。split -b 5G:将输入流分割为每块最大5GB。image_part_.gz或image_part_.xz:分块文件前缀,生成的文件名类似image_part_.gz.aa、image_part_.gz.ab等。
2. 合并分块并还原镜像
gzip 压缩分块的合并与加载
cat image_part_.gz.* | gunzip | docker load
xz 压缩分块的合并与加载
cat image_part_.xz.* | xz -d | docker load
工作原理
-
压缩分块:
docker save输出镜像的 TAR 存档到标准输出。- 通过管道将 TAR 数据实时压缩(
gzip或xz)。 split将压缩后的流按5G大小分割为多个文件。
-
合并还原:
cat按顺序合并所有分块文件。gunzip或xz -d解压合并后的流。docker load从解压后的 TAR 流中加载镜像。
注意事项
- 分块命名:
split默认生成aa,ab等后缀。若分块超过几百个,需用-a <长度>指定后缀长度(如-a 3生成001)。 - 磁盘空间:合并时需要足够的临时空间存储解压后的完整 TAR 数据(如原镜像为24GB,需至少24GB空间)。
- 压缩选择:
gzip:速度较快,适合快速处理。xz:压缩率更高(尤其适合二进制数据),但需要更多时间和CPU资源。