0


Docker本地镜像的导出导入

Docker中的导入和导出,提供两种方案,下面分别介绍。

  • 对于容器(container)的导入和导出,使用export和import。
  • 对于镜像(image)的导入和导出,使用save和load。

1. 容器(container)的导入和导出

如果需要导出和导入容器(container),则使用export和import命令。

1)查看本机的容器(container)

通过命令

docker ps -a

来查询本机所有的容器。

示例如下 :

$ docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED       STATUS       PORTS                                       NAMES
6d2304b6a8e2   registry   "/entrypoint.sh /etc…"   2 hours ago   Up 2 hours   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry
$ 

2)导出容器(container)

导出容器(container)命令格式:

docker export <容器ID> > <生成容器文件>.tar

示例如下:

$ docker export 6d2304b6a8e2 > registry_container.tar
$ 
$ ls -la
-rw-rw-r--  1 wrs  wrs  25727488 Oct 24 23:24 registry.tar

3)导入容器(container)

导入容器(container)命令格式:

docker import - <新镜像名称> < <容器文件>.tar

示例如下:

$ docker import - registry-new < registry_container.tar
sha256:b8f4b29755a2fcc3e82e33895e911cb2b151195561f257e6baa8f4caec31612b
$
$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
registry-new   latest    b8f4b29755a2   13 seconds ago   25.2MB
registry       latest    75ef5b734af4   12 months ago    25.4MB

2. 镜像(image)的导入和导出

如果需要导出和导入镜像(image),则使用save和load命令。

1)查看本机的镜像(image)

通过命令

docker images

来查询本机所有的镜像。

示例如下:

$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
registry-new   latest    b8f4b29755a2   5 minutes ago   25.2MB
registry       latest    75ef5b734af4   12 months ago   25.4MB

2)保存镜像

使用

docker save

命令根据镜像ID将镜像保存成一个文件。命令格式:

docker save <镜像ID> > <镜像文件>.tar

示例如下:

$ docker save 75ef5b734af4 > registry_image.tar
$ ls -l
total 50576
-rw-rw-r-- 1 wrs  wrs  26008064 Oct 24 23:43 registry_image.tar

还可以将多个镜像打成一个文件。命令格式:

docker save -o <镜像文件>.tar <镜像1名称>:<TAG> <镜像2名称>:<TAG> <镜像3名称>:<TAG>

示例如下:

$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
registry-new   latest    b8f4b29755a2   17 minutes ago   25.2MB
mysql          latest    be960704dfac   9 days ago       602MB
mariadb        latest    4b8711c6c639   7 weeks ago      407MB
registry       latest    75ef5b734af4   12 months ago    25.4MB
$
$ docker save -o multi_images.tar mysql:latest mariadb:latest registry:latest
wrs@wrs-VirtualBox:/tmp$ 
wrs@wrs-VirtualBox:/tmp$ ls -l
total 1083696
-rw------- 1 wrs  wrs  1057908736 Oct 24 23:49 multi_images.tar
-rw-rw-r-- 1 wrs  wrs    26008064 Oct 24 23:43 registry_image.tar
-rw-rw-r-- 1 wrs  wrs    25727488 Oct 24 23:24 registry.tar

3)载入镜像

使用docker load命令将镜像文件加载。命令格式:

docker load < <镜像文件>.tar

示例如下:

$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
registry-new   latest    b8f4b29755a2   26 minutes ago   25.2MB
mariadb        latest    4b8711c6c639   7 weeks ago      407MB
registry       latest    75ef5b734af4   12 months ago    25.4MB
$
$ docker load < mysql_image.tar 
664144bd1f24: Loading layer [==================================================>]  115.7MB/115.7MB
d6b2e74ff5bc: Loading layer [==================================================>]  11.26kB/11.26kB
e4b9aa8d7f77: Loading layer [==================================================>]  2.359MB/2.359MB
351aeade47c3: Loading layer [==================================================>]  16.94MB/16.94MB
ba13a3d5fd83: Loading layer [==================================================>]  6.656kB/6.656kB
a175988b08be: Loading layer [==================================================>]  3.072kB/3.072kB
46eea9ff66e1: Loading layer [==================================================>]  142.3MB/142.3MB
34e3dfece44b: Loading layer [==================================================>]  3.072kB/3.072kB
95debb10d09a: Loading layer [==================================================>]    342MB/342MB
cf0628e5b340: Loading layer [==================================================>]  17.41kB/17.41kB
Loaded image: mysql:latest
$
$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
registry-new   latest    b8f4b29755a2   27 minutes ago   25.2MB
mysql          latest    be960704dfac   9 days ago       602MB
mariadb        latest    4b8711c6c639   7 weeks ago      407MB
registry       latest    75ef5b734af4   12 months ago    25.4MB

3. 两种方案的差别

1)是否包含镜像历史

  • export导出(import导入)是根据容器获取的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
  • save保存(load加载)的是镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。

2)是否可以对镜像重命名

  • 容器的import可以为镜像指定新的名称
  • 镜像的load不能对载入的镜像重命名

3)是可以将多个镜像/容器打包到一个文件

  • export不支持
  • save支持

4)应用场景不同

  • 容器的export导出的应用场景:主要是用来制作基础镜像。比如从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用export保存为一个基础镜像。然后,把这个镜像分发给他人使用,比如作为基础的开发环境。
  • 镜像的save保存的应用场景:如果应用的是使用docker-compose.yml编排的多个镜像组合,但要部署的客户服务器并不能连外网。这时就可以使用save将用的镜像打包,然后拷贝到客户的服务器上使用load载入。
标签: docker 容器

本文转载自: https://blog.csdn.net/qq_25735431/article/details/143256770
版权归原作者 技术农场主 所有, 如有侵权,请联系我们删除。

“Docker本地镜像的导出导入”的评论:

还没有评论