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)

相关推荐
你不知道我是谁?1 小时前
负载均衡--四层、七层负载均衡的区别
运维·服务器·负载均衡
dyj0951 小时前
【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
运维·nginx·rancher
码出钞能力2 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-3 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
Hellc0073 小时前
Nginx 高级 CC 与 DDoS 防御策略指南
运维·nginx·ddos
呆萌的代Ma3 小时前
解决Mac上的老版本docker desktop 无法启动/启动后一直转圈/无法登陆账号的问题
macos·docker·eureka
feilieren3 小时前
Docker 安装 Elasticsearch 9
运维·elasticsearch·docker·es
KaiwuDB4 小时前
使用Docker实现KWDB数据库的快速部署与配置
数据库·docker
小皮侠5 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Maki Winster5 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu