docker save命令详解

docker save 命令用于将一个或多个 Docker 镜像 打包成 归档文件(tar 格式),便于迁移、备份或离线分发。它不同于 docker export(导出容器文件系统),docker save 会完整保留镜像的 所有层(Layers)、标签(Tags)和元数据。


1. 命令语法

docker save [OPTIONS] IMAGE [IMAGE...] > output.tar

docker save [OPTIONS] -o output.tar IMAGE [IMAGE...]

参数说明

参数说明
IMAGE 要保存的镜像名称或 ID(支持多个镜像)。
-o / --output 指定输出文件路径(替代 > 重定向)。
> output.tar 使用 Shell 重定向保存为 .tar 文件(与 -o 二选一)。

2. 使用示例

(1) 保存单个镜像

docker save alpine:latest > alpine.tar

docker save -o alpine.tar alpine:latest
  • 将 alpine:latest 镜像保存为 alpine.tar 文件。

(2) 保存多个镜像

docker save ubuntu:20.04 nginx:latest > images.tar
  • 将 ubuntu:20.04 和 nginx:latest 打包到同一个 images.tar 文件。

(3) 保存镜像到指定目录

docker save -o /tmp/backup/redis.tar redis:6.2
  • 将 redis:6.2 保存到 /tmp/backup/redis.tar


3. 关键特性

(1) 保留完整镜像结构

  • 包含镜像的所有层(Layers)、历史记录和元数据。

  • 支持多标签镜像(如 my-image:dev 和 my-image:latest 指向同一镜像)。

(2) 离线分发与备份

  • 生成的 .tar 文件可以:

    • 通过 U 盘或网络传输到其他机器。

    • 上传到私有镜像仓库(需配合 docker load 恢复)。

(3) 与 docker load 配合使用

  • 保存镜像:

    docker save -o my-images.tar nginx:latest mysql:5.7
  • 恢复镜像:

    docker load -i my-images.tar

4. 常见问题

Q1: docker save 和 docker export 的区别?

命令对象输出内容典型用途
docker save 镜像 完整镜像(含所有层和元数据)。 镜像备份、离线分发。
docker export 容器 容器文件系统的快照(无层信息)。 容器文件系统迁移。

Q2: 如何查看 .tar 文件中的镜像信息?

tar -tf alpine.tar | head  # 列出文件内容(镜像层在 `manifest.json` 中描述)

Q3: 保存的镜像体积很大,如何优化?

  • 使用 docker image prune 清理无用镜像。

  • 压缩 .tar 文件:

    docker save alpine:latest | gzip > alpine.tar.gz

5. 实际应用场景

(1) 离线环境部署镜像

  1. 在有网络的机器上保存镜像:

    docker save -o offline-images.tar nginx:latest python:3.9
  2. 将 offline-images.tar 复制到离线机器。

  3. 在离线机器上加载:

    docker load -i offline-images.tar

(2) 批量备份生产环境镜像

docker save $(docker images -q) > all-images.tar
  • 备份所有本地镜像(谨慎使用,可能包含无用镜像)。

(3) 迁移镜像到私有仓库

  1. 保存镜像:

    docker save my-app:1.0 > my-app.tar
  2. 上传到私有仓库服务器:

    docker load -i my-app.tar
    docker tag my-app:1.0 my-registry.com/my-app:1.0
    docker push my-registry.com/my-app:1.0

6. 总结

场景命令示例
保存单个镜像 docker save -o image.tar ubuntu:20.04
保存多个镜像 docker save nginx:latest redis:6.0 > apps.tar
加载镜像 docker load -i image.tar
压缩保存 `docker save alpine:latest gzip > alpine.tar.gz`

关键点:

  • docker save 适用于 镜像备份和离线分发。

  • 配合 docker load 可恢复镜像。

  • 与 docker export 不同,它保留完整的镜像结构。

posted @ 2025-06-27 13:55  郭慕荣  阅读(3995)  评论(0)    收藏  举报