55 lines
1.9 KiB
Markdown
55 lines
1.9 KiB
Markdown
|
||
|
||
|
||
下面是压缩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资源。 |