Docker本地镜像的导出导入两种方案介绍
作者:技术农场主
这篇文章主要介绍了Docker本地镜像的导出导入两种方案的相关资料,两种方法分别是export/import和save/load两种方案,文中并对比了它们的差别和应用场景,需要的朋友可以参考下
前言
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本地镜像的导出导入两种方案的文章就介绍到这了,更多相关Docker本地镜像导出导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!