Docker保存镜像和导入镜像文件(图文详解)

Docker保存镜像和导入镜像文件(图文详解)

Docker 保存和导入镜像文件是 Docker 镜像管理中的两个关键操作,它们在不同的场景下有着各自的意义和用途。以下是对这两个操作的详细说明:

1 基本命令介绍

1.1 Docker 保存镜像(docker save

命令格式:

bash 复制代码
docker save -o <输出文件路径> <镜像名称>:<标签>

意义与用途:

  • 归档与备份docker save 命令用于将本地的 Docker 镜像导出为一个 tar 文件。这个文件包含了镜像的所有层以及元数据,如标签、配置信息等。通过这种方式,可以对重要的镜像进行归档或备份,防止因为意外删除或系统故障导致的数据丢失。

  • 迁移与分发 :当需要将镜像从一台机器迁移到另一台机器时,尤其是在没有直接网络连接的情况下,可以使用 docker save 将镜像导出为文件,然后通过其他方式(如USB驱动器、FTP传输等)将该文件复制到目标机器上。这在离线环境中特别有用。

  • 版本控制 :在某些情况下,你可能希望保留特定版本的镜像,以便在未来能够回滚到该版本。通过 docker save 可以创建这些版本的快照,确保任何时候都可以恢复到某个已知的良好状态。

  • 审计与合规性:对于企业级应用,有时需要对使用的镜像进行审计或验证其来源。通过保存镜像文件,可以在必要时检查镜像的内容,确保符合安全策略和法规要求。

1.2 Docker 导入镜像(docker load

命令格式:

bash 复制代码
docker load -i <输入文件路径>

意义与用途:

  • 恢复备份docker load 命令用于将之前使用 docker save 创建的 tar 文件重新加载到 Docker 中,使其成为可用的镜像。这对于从备份中恢复镜像非常有用,特别是在发生灾难恢复时。

  • 接收迁移的镜像 :当从其他机器接收到镜像文件后,可以使用 docker load 将其导入本地 Docker 环境。这使得跨机器或跨环境的镜像共享变得简单易行。

  • 定制化镜像部署 :如果你有一个经过特殊定制的镜像,并且希望将其部署到多个环境中,可以通过 docker savedocker load 组合来实现。例如,在开发完成后,可以将开发环境中的镜像导出,然后在测试或生产环境中导入,从而保证各个环境的一致性。

  • 绕过镜像仓库限制 :有时候,由于网络问题或者镜像仓库的访问权限限制,无法直接从远程仓库拉取镜像。此时,可以先在有访问权限的环境中获取镜像并保存为文件,再通过 docker load 在受限环境中导入镜像。

  • 私有镜像的安全分发 :对于包含敏感信息或专有技术的镜像,直接上传到公共镜像仓库可能存在安全风险。通过 docker savedocker load,可以在不公开镜像内容的前提下,安全地在受信任的合作伙伴之间分发镜像。

2 实际操作演示

2.1 准备环境

两台Ubuntu22.04 Server服务器或虚拟机,其中一台IP地址为:192.168.88.171,一台IP地址为192.168.3.228,且同时两台都已经安装好了docker环境。

假设模拟只有IP为192.168.88.171的服务器可对外连接互联网,192.168.3.228的服务器不能连接互联网,只跟192.168.88.171互联组成局域网。

服务器地址 网络情况-外网 网络情况-内网 实际操作
192.168.88.171 允许 允许 通过互联网下载并保存mysql8.0.34镜像
192.168.3.228 允许 通过内网其他服务器镜像源导入mysql8.0.34镜像
2.2 互联网拉取镜像源

在192.168.88.171拉取mysql8.0.34镜像

复制代码
docker pull mysql:8.0.34

查看当前docker的所有镜像源,可以看到已经下载了mysql8.0.34

复制代码
docker images
2.3 保存镜像源

1.单个镜像保存

在 Docker 中,保存镜像的命令是 docker save。这个命令可以将一个或多个镜像保存到一个 tar 归档文件中。以下是如何使用该命令的基本语法:

bash 复制代码
docker save -o <输出文件路径> <镜像名称>[:<标签>]

保存192.168.88.171的mysql8.0.34镜像至根目录下的home文件夹

复制代码
docker save -o /home/mysql8.0.34.tar mysql:8.0.34

进入home文件夹可以看到已经保存了mysql8.0.34.tar

2.多个镜像保存

查看当前镜像文件,例如我们需要保存nacos和mysql8镜像(保存到同一个tar文件)

复制代码
docker save -o /home/mysql_nacos_images.tar mysql:8.0.34 nacos/nacos-server:v2.1.1

查看home目录下是否生成对应的tar文件

2.4 导入镜像源

1.镜像源传输
scp 是一种基于 SSH 的安全文件复制协议,适用于 Linux、macOS 和 Windows(通过 WSL 或 Git Bash 等工具)。

从源服务器传输到目标服务器:

在源服务器上执行以下命令:

bash 复制代码
scp /path/to/nacos-server-v2.1.1.tar user@target-server:/path/to/destination/
  • /path/to/nacos-server-v2.1.1.tar 是源服务器上的文件路径。
  • user 是目标服务器的用户名。
  • target-server 是目标服务器的 IP 地址或主机名。
  • /path/to/destination/ 是目标服务器上的保存路径。

在192.168.88.171服务器上执行传输文件mysql_nacos_images.tar至192.168.3.228上

复制代码
scp /home/mysql_nacos_images.tar [email protected]:/home/

输入目标服务器对应的用户名密码后即可开始传输

传输完成后在192.168.3.228服务器上即可看到对应镜像源

2.导入镜像源

在192.168.3.228服务器上使用 docker load 命令来加载镜像文件。如果你有一个未压缩的 .tar 文件,可以运行以下命令:

bash 复制代码
cd /home
docker load -i mysql_nacos_images.tar

加载完毕后,会显示已经导入nacos与mysql8

查看镜像源

复制代码
docker images

至此所有的演示过程已经完成

注意事项

  • 镜像大小:保存的镜像文件可能会非常大,特别是当镜像包含大量依赖项或数据时。因此,在导出和导入镜像时应考虑存储空间和传输带宽的问题。
  • 兼容性:虽然 Docker 的镜像格式具有良好的向后兼容性,但在不同版本的 Docker 之间迁移镜像时,仍需注意可能存在的兼容性问题。
  • 镜像优化:为了减少镜像文件的体积,可以在构建镜像时采用多阶段构建、清理不必要的文件等方式来优化镜像,使导出的文件更小,便于管理和传输。
相关推荐
晓柏9 分钟前
OpenEuler 系统安装 docker 和 nvidia-docker
docker
FreeBuf_31 分钟前
新型恶意软件采用独特混淆技术劫持Docker镜像
运维·docker·容器
李菠菜3 小时前
CentOS系统指定版本Docker与Docker-Compose在线安装教程
docker·容器·centos
maotou5263 小时前
Ubuntu22学习记录
linux·ubuntu
包达叔3 小时前
dockercompose文件仓库
docker
放飞自我的Coder5 小时前
【win11 安装WSL2 详解一遍过!!】
linux·ubuntu
蜕变的土豆5 小时前
Ubuntu下软件运行常见异常退出问题汇总分析
linux·ubuntu
lswzw6 小时前
Ubuntu K8s集群安全加固方案
安全·ubuntu·kubernetes
李菠菜7 小时前
Kubernetes上通过Helm部署高可用Redis集群
docker·容器·kubernetes
李菠菜7 小时前
修改KubeSphere外网访问端口
docker·容器·kubernetes