docker save和docker export
docker save
和 docker export
是 Docker 中两个用于导出容器或镜像的命令,但它们的用途和工作方式有显著区别。
作用对象不同
docker save
• 操作对象是镜像(image
)。
• 将一个或多个镜像打包成归档文件(.tar
),包括镜像的所有层、标签、历史记录和元数据。
• 适用于备份或迁移镜像到其他环境。
docker export
• 操作对象是容器(container
)。
• 将容器的当前文件系统状态导出为一个归档文件(.tar
),不包含镜像的层、历史记录或元数据。
• 仅保存容器的快照,适用于分享容器的文件系统状态。
输出内容不同
docker save
• 保留完整的镜像结构(包括所有层),导出的文件可以通过 docker load
恢复为原始镜像。
• 支持多镜像打包(例如 docker save -o images.tar image1 image2
)。
docker export
• 仅导出容器的文件系统(扁平化结构),丢失镜像的分层信息和元数据(如 ENTRYPOINT
、CMD
、环境变量等)。
• 导出的文件需要通过 docker import
重新创建为镜像,且生成的镜像无历史记录。
典型用途
docker save
• 备份镜像供后续使用(例如离线环境部署)。
• 迁移镜像到其他 Docker 主机。
docker export
• 快速分享容器的文件系统(例如调试或分析)。
• 基于容器状态创建新镜像(但需手动重新配置元数据)。
如何使用
docker save
docker save -o my_image.tar my_image:tag
docker load -i my_image.tar # 恢复镜像
docker export
docker export -o my_container.tar my_container
docker import my_container.tar new_image:tag # 导入为镜像
关键区别总结
特性 | docker save | docker export |
---|---|---|
操作对象 | 镜像(image ) | 容器(container ) |
输出内容 | 完整镜像(含层和元数据) | 容器文件系统快照(无层/元数据) |
恢复命令 | docker load | docker import |
是否保留历史记录 | 是 | 否 |
典型场景 | 镜像备份/迁移 | 容器状态快照 |
如何选择
• 需要备份或迁移镜像(保留完整配置) → docker save
。
• 仅需容器当前的文件系统(如调试或生成新镜像) → docker export
。
理解两者的差异可以避免误用导致数据丢失(例如误用 export
丢失镜像的启动配置)。