


下面是压缩Docker镜像为分块压缩包及合并的命令：

---

### **1. 压缩并分割镜像**
#### **推荐方式：直接通过管道压缩并分块**
使用 `gzip` 压缩（速度快，中等压缩率）：
```bash
docker save <IMAGE_NAME:TAG> | gzip | split -b 5G - image_part_.gz
```
或使用 `xz` 压缩（高压缩率，速度慢）：
```bash
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 压缩分块的合并与加载**
```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资源。