# docker image save

## 描述

将一个或多个镜像保存成一个 tar 格式的归档 (archive)，默认是将其写到标准输出 (STDOUT)。

生成的 tar 归档包含所有父层 (parent layers)，以及所有标签 (tags) + 版本 (versions)，或者是你指定的 `repo:tag`。对于每一个你提供的镜像参数，都会这样处理。

## 用法

```
docker image save [OPTIONS] IMAGE [IMAGE...]
```

这个命令也有一个别名 (alias)：`docker save`。

## 选项

\| 选项 | 默认值 | 描述 | | -- | | | | `-o, --output` | — | 写入到一个文件，而不是输出到标准输出 (STDOUT)。 | | `--platform` | — | (在 API 1.48 及以上版本) 只保存指定的平台 (variant)。格式为 `os[/arch[/variant]]`，例如 `linux/amd64`。 |

* `os`：操作系统
* `arch`：架构 (比如 amd64, arm64)
* `variant`：架构变种 (可选)
* 如果省略 arch / variant，会默认为守护进程 (daemon) 当前平台的架构 / 变种。

### 示例 (Examples)

#### 1. 创建一个备份 (backup)，可以之后用 `docker load` 恢复

```shellscript
$ docker save busybox > busybox.tar
$ ls -sh busybox.tar
2.7M busybox.tar

$ docker save --output busybox.tar busybox
$ ls -sh busybox.tar
2.7M busybox.tar

$ docker save -o fedora-all.tar fedora
$ docker save -o fedora-latest.tar fedora:latest
```

#### 2. 使用 gzip 将镜像保存为 `.tar.gz` (压缩归档)

为了减小备份体积，你可以将 `docker save` 的输出通过管道 (pipe) 传给 `gzip`：

```shellscript
docker save myimage:latest | gzip > myimage_latest.tar.gz
```

#### 3. “挑选 (cherry-pick)” 特定标签 (tags)

你可以仅保存某些标签，而不是一个镜像的所有标签：

```shellscript
docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy
```

这里，只把 `ubuntu:lucid` 和 `ubuntu:saucy` 保存到同一个 tar 包里。

#### 4. 保存特定平台 (variant) 的镜像 (`--platform`)

* `--platform` 选项允许你指定要保存的镜像平台 (variant)。默认情况下，如果你的 Docker 守护进程 (daemon) 本地存有多个平台版本 (multi-platform variants)，`docker save` 会保存所有这些版本。使用 `--platform` 可以指定只保存某一个。
* 如果你指定的平台在本地镜像存储 (image store) 中不存在，就会报错。
* 平台格式是 `os[/arch[/variant]]`，例如 `linux/amd64` 或 `linux/arm64/v8`。arch 和 variant 是可选的，如果省略，会默认使用守护进程的本机架构 / 变种。

**举例**：保存 `alpine:latest` 的 RISC‑V 版本 (riscv64)：

```shellscript
$ docker pull --platform=linux/riscv64 alpine:latest
…（下载镜像）…
$ docker image save --platform=linux/riscv64 -o alpine-riscv.tar alpine:latest
$ ls -lh alpine-riscv.tar
-rw- … 3.9M alpine-riscv.tar
```

如果你指定一个不存在的平台变体，比如 `linux/s390x`，你可能会看到类似这样的错误：

```
Error response from daemon: no suitable export target found for platform linux/s390x
```
