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载入。
版权归原作者 技术农场主 所有, 如有侵权,请联系我们删除。