Docker 中 \`docker save\` 和 \`docker export\` 的区别与选择

Docker 中 `docker save` 和 `docker export` 的区别与选择

docker savedocker export 都是用于将 Docker 镜像或容器打包成文件的命令,但它们的应用场景和生成的文件有本质区别,主要差异如下:

一、核心区别

特性 docker save docker export
处理对象 镜像(Image) 容器(Container,需处于停止状态)
文件格式 包含镜像分层、元数据的 tar 包 仅包含容器文件系统的 tar 包(无分层信息)
是否保留历史 保留完整的镜像分层和历史记录 不保留历史,仅导出当前容器的文件系统
导入命令 需用 docker load 导入 需用 docker import 导入
典型用途 备份镜像、迁移镜像(含完整信息) 导出容器快照、制作基础镜像(精简)

二、详细用法

1. docker save(处理镜像)

作用:将一个或多个镜像打包为 tar 文件,保留镜像的完整分层结构、标签、元数据等。

语法

1
docker save \[选项] 镜像名\[:标签]... -o 输出文件名.tar

示例

1
2
3
4
5
6
7
\# 保存单个镜像

docker save ubuntu:20.04 -o ubuntu20.tar

\# 保存多个镜像到一个文件

docker save nginx:latest mysql:8.0 -o web\_db\_images.tar

导入方式(使用 docker load):

1
docker load -i ubuntu20.tar  # 导入后保留原镜像名和标签

2. docker export(处理容器)

作用:将一个运行过的容器(需先停止)导出为 tar 文件,仅包含容器当前的文件系统状态,不保留镜像分层和历史。

语法

1
2
3
4
5
docker export \[选项] 容器ID/容器名 > 输出文件名.tar

\# 或

docker export -o 输出文件名.tar 容器ID/容器名

示例

1
2
3
4
5
6
7
\# 先停止容器(若运行中)

docker stop my\_container

\# 导出容器

docker export my\_container -o my\_container\_snapshot.tar

导入方式(使用 docker import):

1
2
3
\# 导入为新镜像,需手动指定镜像名和标签

docker import my\_container\_snapshot.tar my\_custom\_image:v1.0

三、如何选择?

  • 若需 备份或迁移完整镜像(含版本历史、分层缓存),用 docker save + docker load

  • 若需 导出容器的当前状态(如作为基础镜像分发,追求精简),用 docker export + docker import

注意docker export 生成的文件通常比 docker save 小,但丢失了镜像的分层信息,导入后无法增量更新。

(注:文档部分内容可能由 AI 生成)