docker 镜像的导出和导入(导出完整镜像和导出容器快照)
一、导出原始镜像
1. 使用 docker save
导出完整镜像
适用场景:保留镜像的所有层、元数据、标签和历史记录,适合迁移或备份完整镜像环境。 操作命令
docker save -o <导出文件名.tar> <镜像名:标签>
示例:docker save -o milvus_backup.tar milvusdb/milvus:v2.5.6
参数说明:
-o
:指定导出的文件名,如milvus_backup.tar
。<镜像名:标签>
:需导出的镜像名称及标签(如milvusdb/milvus:v2.5.6
)。
扩展功能:
- 导出多个镜像:
docker save -o combined.tar image1:tag1 image2:tag2
- 压缩导出文件:
docker save image:tag | gzip > image.tar.gz
二、导入镜像
- 1. 使用
docker load
导入完整镜像
适用场景:导入通过 docker save
导出的完整镜像文件,保留所有元数据。 操作命令:
docker load -i <导出文件名.tar>
示例:docker load -i milvus_backup.tar
导入后镜像名称和标签与原镜像一致,若需重命名,需使用 docker tag
命令:
docker tag <原镜像ID> <新镜像名:新标签>
三、使用 docker import
导入容器快照
适用场景:若文件是通过 docker export
导出的容器快照(非完整镜像),需使用此命令导入为镜像。 操作命令:
docker import <快照文件.tar> <新镜像名:标签>
示例:docker import milvus_snapshot.tar milvus_custom:v2.5.6
不保留历史层和元数据(如环境变量、启动命令),需手动指定启动参数 。
可添加元数据:docker import -c "ENV LANG=en_US.UTF-8" snapshot.tar image:tag
四、关键区别与注意事项
1. docker
save/load
vs docker
export/import
特性 | docker save/load | docker export/import |
---|---|---|
数据类型 | 完整镜像(含所有层和元数据) | 容器快照(仅文件系统状态) |
保留历史层 | 是 | 否 |
适用场景 | 迁移、备份完整镜像 | 快速创建镜像或恢复容器状态 |
文件生成方式 | docker save | docker export |
2. 常见问题排查
-
导入失败:
- 文件类型不匹配:确认文件是
docker save
生成(用docker load
)还是docker export
生成(用docker import
) 。 - 文件损坏:校验文件完整性(如
md5sum
),重新导出或传输文件。 - 存储空间不足:检查 Docker 存储路径
/var/lib/docker
的剩余空间,必要时迁移存储目录。
- 文件类型不匹配:确认文件是
-
权限问题:确保当前用户对导出文件有读取权限(
chmod +r file.tar
)
四、操作流程图
导出镜像 → docker save → 生成.tar文件 → 传输到目标环境 → docker load → 导入镜像 → docker tag重命名导出容器 → docker export → 生成.tar文件 → docker import → 生成新镜像(需补充元数据)