docker--导出镜像 save/export、导入镜像 load/import

简介: docker--导出镜像 save/export、导入镜像 load/import

导出镜像


有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用。


导出镜像的命令为

# images [images...] 可以有多个 images 镜像
docker save [options] images [images...]

查看 save 的介绍

[root@dce-10-6-215-215 ~]# docker save --help
Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
  -o, --output string   Write to a file, instead of STDOUT  # 写入一个文件,而不是STDOUT

例如我有两个镜像,一个 nginx,一个 busybox

使用下面命令导出

# -o /opt/images.tar.gz 表示将镜像导出到 /opt/images.tar.gz
# nginx:latest busybox:1.35.0 表示将这两个镜像都导出在 images.tar.gz 里
docker save -o /opt/images.tar.gz nginx:latest busybox:1.35.0
# > -o /opt/images_new.tar.gz 表示将镜像导出到 /opt/images_new.tar.gz
docker save > /opt/images_new.tar.gz nginx:latest busybox:1.35.0

导出后查看


导入镜像


上面我们已经导出了镜像,然后就可以导入镜像了,导入镜像使用 docker load [options]

[root@dce88 ~]# docker load --help
Usage:  docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output  # 静默输出

先将本地的 nginx 和 busybox 镜像删除

docker rmi nginx:latest busybox:1.35.0

在导入

# 使用 -i 导入
[root@dce88 ~]# docker load -i /opt/images.tar.gz
08249ce7456a: Loading layer   83.9MB/83.9MB
d5b40e80384b: Loading layer  62.01MB/62.01MB
b2f82de68e0d: Loading layer  3.072kB/3.072kB
41451f050aa8: Loading layer  4.096kB/4.096kB
44193d3f4ea2: Loading layer  3.584kB/3.584kB
e7344f8a29a3: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest
cf4ac4fc0144: Loading layer  1.463MB/1.463MB
Loaded image: busybox:1.35.0
# 使用 < 导入
[root@dce88 ~]# docker load  < /opt/images.tar.gz
08249ce7456a: Loading layer   83.9MB/83.9MB
d5b40e80384b: Loading layer  62.01MB/62.01MB
b2f82de68e0d: Loading layer  3.072kB/3.072kB
41451f050aa8: Loading layer  4.096kB/4.096kB
44193d3f4ea2: Loading layer  3.584kB/3.584kB
e7344f8a29a3: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest
cf4ac4fc0144: Loading layer  1.463MB/1.463MB
Loaded image: busybox:1.35.0


使用 export 和 import


这两个命令是通过容器来导入、导出镜像。首先我们使用 docker ps -a 命令查看本机所有的容器。

[root@dce88 ~]# docker ps -a
CONTAINER ID   IMAGE                          COMMAND                  CREATED        STATUS                    PORTS                                                                                                           NAMES
b6f479620115   nginx:latest                   "/docker-entrypoint.…"   11 hours ago   Up 11 hours               80/tcp                                                                                                          strange_lichterman
d15271086cb7   nginx                          "/docker-entrypoint.…"   11 hours ago   Exited (0) 11 hours ago                                                                                                                   focused_einstein
f277875aed02   gitlab/gitlab-ce:14.8.2-ce.0   "/assets/wrapper"        2 days ago     Up 2 days (healthy)       0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp   gitlab-dev


export 导出容器

使用 docker export 命令根据容器 ID 将镜像导出成一个文件

语法

# export 导出的是容器,不是镜像。save 导出的是镜像,不是容器
docker export [options] container

启动 nginx 镜像在导出

# 如果没有启动的容器,则需要启动容器
docker run -it -d nginx:latest
# 使用 export 导出容器,使用的是容器 id
docker export -o nginx-test.tar b6f479620115


import 导入容器

使用 docker import 命令则可将这个镜像文件导入进来

命令

docker import [options] file|URL|- [REPOSITORY[:TAG]]

上面我们已经使用 export 导出了一个 nginx-test.tar 的文件,接下来我们使用 import 导入

# 先删除 nginx 镜像
docker rmi nginx:latest

在导入镜像

# 导入镜像,mynginx:v1.21 是我们自己定义的镜像名称
docker import nginx-test.tar mynginx:v1.21


区别


export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出

  • 文件大小不同:export 导出的镜像文件体积小于 save 保存的镜像
  • 是否可以对镜像重命名
  •  docker import 可以为镜像指定新名称
  •  docker load 不能对载入的镜像重命名
  • 是否可以同时将多个镜像打包到一个文件中
  • docker export 不支持
  • docker save 支持
  • 是否包含镜像历史
  • export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作
  • 而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)
  • 应用场景不同
  • docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
  • docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。

 


相关文章
|
19天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
716 29
|
16天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
21天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
102 2
|
15天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
52 0
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
11天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
3天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
25 5
|
5天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
4天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
15 1
下一篇
无影云桌面