Docker 镜像导出与导入:export/import vs save/load

在使用 Docker 时,我们经常会遇到需要将镜像从一台机器迁移到另一台机器的情况。虽然可以通过 Docker Hub 或其他镜像仓库来实现,但有时出于安全或网络限制,我们需要将镜像保存为本地文件,然后手动拷贝到目标机器上进行导入。Docker 提供了两种主要的镜像导出与导入方式:export/importsave/load。本文将详细介绍这两种方式的使用方法、区别以及适用场景。

一、使用 exportimport

1.1 查看本机的容器

exportimport 是通过容器来导出和导入镜像的。首先,我们需要查看本机上所有容器的列表:

bash 复制代码
docker ps -a

1.2 导出镜像

使用 docker export 命令可以根据容器 ID 将镜像导出为一个文件。例如:

bash 复制代码
docker export f299f501774c > hangger_server.tar

执行该命令后,镜像文件 hangger_server.tar 将被保存到当前目录。

1.3 导入镜像

使用 docker import 命令可以将导出的镜像文件导入到本地镜像库中。例如:

bash 复制代码
docker import - new_hangger_server < hangger_server.tar

执行 docker images 命令可以确认镜像已经成功导入。

二、使用 saveload

2.1 查看本机的镜像

saveload 是通过镜像来保存和加载镜像文件的。首先,我们需要查看本机上所有镜像的列表:

bash 复制代码
docker images

2.2 保存镜像

使用 docker save 命令可以根据镜像 ID 将镜像保存为一个文件。例如:

bash 复制代码
docker save 0fdf2b4c26d3 > hangge_server.tar

此外,我们还可以将多个镜像打包到一个文件中:

bash 复制代码
docker save -o images.tar postgres:9.6 mongo:3.4

2.3 载入镜像

使用 docker load 命令可以将保存的镜像文件载入到本地镜像库中。例如:

bash 复制代码
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 保存为一个基础镜像,然后分发给其他人使用。
  • docker save 的适用场景
    • 适用于需要将多个镜像打包并迁移到其他机器的情况。例如,在使用 docker-compose 编排多个镜像时,可以将所有相关镜像打包成一个文件,然后在目标机器上使用 docker load 载入。

四、总结

Docker 提供了两种镜像导出与导入的方式:export/importsave/loadexport/import 适用于制作基础镜像,而 save/load 适用于迁移包含多个镜像的应用。在选择使用哪种方式时,需要根据具体需求考虑文件大小、是否需要保留镜像历史等因素。

希望本文对你有所帮助!如果还有其他问题,欢迎留言交流。


原文链接Docker - 实现本地镜像的导出、导入(export、import、save、load)

相关推荐
迷茫运维路3 分钟前
基于Jenkins的DevOps工程实践之Jenkins共享库
运维·jenkins·devops
文牧之31 分钟前
PostgreSQL 的 ANALYZE 命令
运维·数据库·postgresql
用手码出世界1 小时前
【Linux】日志与策略模式、线程池
linux·运维·服务器·开发语言·c++·策略模式
ZHOU_WUYI2 小时前
WSL在D盘安装Ubuntu
linux·运维·ubuntu
Shanxun Liao2 小时前
DELL EMC Power Edge:如何使用 System Setup 菜单在 RAID 控制器中导入外部配置
运维·服务器·数据库
ephemerals__2 小时前
【Linux】命令行参数与环境变量
linux·运维·服务器
指剑2 小时前
通过AWS Console连接服务器,简化运维过程
运维·服务器·aws
小Tomkk2 小时前
Docker 渡渡鸟镜像同步站 使用教程
docker·容器·eureka
love530love2 小时前
修复笔记:SkyReels-V2项目中的 from_config 警告
运维·windows·笔记·python·virtualenv
Chase_Mos3 小时前
Docker 使用与部署(超详细)
运维·docker·容器