不同设备docker转移容器
引言
docker save
和docker export
的区别:docker save
保存的是镜像(image
),docker export
保存的是容器(container
);docker load
用来载入镜像包,docker import
用来载入容器包,但两者都会恢复为镜像;docker load
不能对载入的镜像重命名,而docker import
可以为镜像指定新名称;docker save
和docker load
过程能够保留镜像分层的文件系统,docker export
和docker import
则没有保存。
从Docker 镜像该怎么传 - 知乎可以得到两种转移容器的方式.
效果展示
过程
1 | # 保存的是容器 |
1 | # 源 |
镜像迁移
将更新导出为镜像后,就可以开始镜像迁移。
由于Docker以集中的方式管理镜像的,所以在迁移之前,需要先从Docker中取出镜像。docker save命令可以将镜像输出,提供了保存镜像到Docker外部的方式。
docker save webapp:1.0 > webapp-1.0.tar
默认定义下,docker save命令会将镜像内容放入输出流中,这种用法有时不太友好,docker save命令还提供了-o选项,用来指定输出文件,使用这个选项可以让命令更具有统一性。
docker save -o ./webapp-1.0.tar webapp:1.0
镜像导出之后可以找到已经存储镜像内容的webapp-1.0.tar文件。通过解压软件查看其中的内容,会看到里面就是镜像所基于的几个镜像层的记录文件。
四、导入镜像
可以通过很多种方式将导出的镜像文件复制到另一台机器上,之后将镜像导入到新机器中运行的Docker中。使用与docker save相对的docker load命令即可。
docker load < webapp-1.0.tar
docker load从输入流中读取镜像的数据,也能够使用-i选项指定输入文件。
docker load -i webapp-1.0.tar
镜像导入后,就可以通过docker images看到,导入的镜像会延用原有的镜像名称。
五、批量迁移
通过docker save和docker load命令还能够批量迁移镜像,只要在docker save中传入多个镜像名作为参数,它就能够将这些镜像都打成一个包,便于一次性迁移多个镜像。
docker save -o ./images.tar webapp:1.0 nginx:1.12 mysql:5.7
装有多个镜像的包可以直接被docker load识别和读取,将这个包导入后,其中所有镜像都会被导入到Docker之中。
导出和导入容器
提交镜像修改,再导出镜像进行迁移的方法还不够效率,使用docker export命令可以直接导出容器,把它简单的理解为docker commit与docker save的结合体。
docker export -o ./webapp.tar webapp
相对的,使用docker export导出的容器包,需要使用docker import导入,导入的结果还是一个镜像,而不是容器。