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