在使用 Docker 时,我们经常会遇到需要将镜像从一台机器迁移到另一台机器的情况。虽然可以通过 Docker Hub 或其他镜像仓库来实现,但有时出于安全或网络限制,我们需要将镜像保存为本地文件,然后手动拷贝到目标机器上进行导入。Docker 提供了两种主要的镜像导出与导入方式:export/import
和 save/load
。本文将详细介绍这两种方式的使用方法、区别以及适用场景。
一、使用 export
和 import
1.1 查看本机的容器
export
和 import
是通过容器来导出和导入镜像的。首先,我们需要查看本机上所有容器的列表:
docker ps -a
1.2 导出镜像
使用 docker export
命令可以根据容器 ID 将镜像导出为一个文件。例如:
docker export f299f501774c > hangger_server.tar
执行该命令后,镜像文件 hangger_server.tar
将被保存到当前目录。
1.3 导入镜像
使用 docker import
命令可以将导出的镜像文件导入到本地镜像库中。例如:
docker import - new_hangger_server < hangger_server.tar
执行 docker images
命令可以确认镜像已经成功导入。
二、使用 save
和 load
2.1 查看本机的镜像
save
和 load
是通过镜像来保存和加载镜像文件的。首先,我们需要查看本机上所有镜像的列表:
docker images
2.2 保存镜像
使用 docker save
命令可以根据镜像 ID 将镜像保存为一个文件。例如:
docker save 0fdf2b4c26d3 > hangge_server.tar
此外,我们还可以将多个镜像打包到一个文件中:
docker save -o images.tar postgres:9.6 mongo:3.4
2.3 载入镜像
使用 docker load
命令可以将保存的镜像文件载入到本地镜像库中。例如:
docker load < hangge_server.tar
三、两种方案的差别
3.1 文件大小
export
导出的镜像文件体积通常小于save
保存的镜像文件。
3.2 是否可以对镜像重命名
docker import
可以为镜像指定新的名称。docker load
不能对载入的镜像重命名。
3.3 是否可以同时将多个镜像打包到一个文件中
docker export
不支持将多个镜像打包到一个文件中。docker save
支持将多个镜像打包到一个文件中。
3.4 是否包含镜像历史
export
导出(import
导入)的镜像是根据容器的当前状态生成的,会丢失镜像的所有历史记录和元数据信息,因此无法进行回滚操作。save
保存(load
加载)的镜像保留了镜像的完整历史记录,可以回滚到之前的层(layer)。
3.5 适用场景
docker export
的适用场景:- 主要用于制作基础镜像。例如,从一个基础镜像(如 Ubuntu)启动一个容器,安装一些软件并进行配置后,使用
docker export
保存为一个基础镜像,然后分发给其他人使用。
- 主要用于制作基础镜像。例如,从一个基础镜像(如 Ubuntu)启动一个容器,安装一些软件并进行配置后,使用
docker save
的适用场景:- 适用于需要将多个镜像打包并迁移到其他机器的情况。例如,在使用
docker-compose
编排多个镜像时,可以将所有相关镜像打包成一个文件,然后在目标机器上使用docker load
载入。
- 适用于需要将多个镜像打包并迁移到其他机器的情况。例如,在使用
四、总结
Docker 提供了两种镜像导出与导入的方式:export/import
和 save/load
。export/import
适用于制作基础镜像,而 save/load
适用于迁移包含多个镜像的应用。在选择使用哪种方式时,需要根据具体需求考虑文件大小、是否需要保留镜像历史等因素。
希望本文对你有所帮助!如果还有其他问题,欢迎留言交流。
原文链接:Docker - 实现本地镜像的导出、导入(export、import、save、load)