docker save 和 docker load 是 docker 中导入导出镜像最常用推荐方式,完整保留层结构、元数据、历史记录及标签,适用于迁移、备份与离线分发。
在 docker 中,导入和导出本地镜像最常用、最推荐的方式是 docker save 和 docker load 这一对命令。它们完整保留镜像的层结构、元数据、历史记录和所有标签,适合迁移、备份或离线分发。
导出镜像(save)
使用 docker save 将一个或多个镜像打包成 .tar 文件:
- 导出单个镜像(带标签):
docker save -o nginx-latest.tar nginx:latest - 导出单个镜像(仅镜像名,自动包含所有关联标签):
docker save -o ubuntu.tar ubuntu - 一次导出多个镜像:
docker save -o apps.tar nginx:alpine redis:7.2 alpine:3.20 - 不指定
-o时,输出会直接写入标准输出,可配合重定向:docker save nginx:latest > nginx.tar
导入镜像(load)
使用 docker load 从 .tar 文件恢复镜像到本地镜像库:
- 基本导入:
docker load -i nginx-latest.tar - 也可用重定向方式(等效):
docker load - 导入后验证:
docker images | grep nginx—— 应能看到原样标签和 ID
注意:export/import 不是导出“镜像”,而是导出“容器快照”
有人混淆 docker export 和 docker import,需明确:
-
docker export <container_id> > container.tar</container_id>导出的是某个容器运行时的文件系统快照,不含镜像历史、分层信息、CMD/ENTRYPOINT、环境变量等元数据; -
docker import container.tar mynewimg:latest会创建一个全新镜像,但它是扁平化的单一层,无法复现原始构建逻辑; - 因此,这不是镜像迁移的正确方式,仅适用于轻量快照或临时测试场景。
实用小贴士
导出前建议先确认镜像名和标签:
- 列出本地镜像:
docker images - 查看镜像详细信息(含 ID 和大小):
docker inspect <image_name></image_name> - 导出大镜像时可加
pv或gzip压缩(需手动处理):docker save nginx:latest | gzip > nginx.tar.gz
导入时解压再 load:gunzip -c nginx.tar.gz | docker load - 目标机器若已有同名镜像,
docker load不会覆盖旧镜像,而是新增(ID 不同),可用docker image prune清理冗余镜像。











