Docker支持一键式导入和导出包含镜像和容器在内的数据。这样,对于不方便对外开放Registry的场合也可以借助便携式存储设备或者网络上的其他协议来进行镜像或容器的分发或迁移。
我们事先在主机1上构建了一个包含了mysql服务器和客户端的镜像 mysql:latest(镜像已修改mysql的用户权限root@% 无密码) ,后续的测试将在这个镜像的基础上进行
接下来我们将mysql:latest这个镜像导出并导入至主机2上,docker的镜像导出命令为save,其格式如下
docker save -o 输出文件名.tgz 镜像名称:版本
和其他docker命令一样,若不指定版本则默认latest版本,我们先在主机1上执行该命令
#docker save -o docker_image_mysql.tgz mysql #ls blog.nvacg.org版权所有 docker_image_mysql.tgz |
随后将docker_image_mysql.tgz通过scp传至主机2。并在主机2上执行装载指令load。
#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos centos6 a0f8f0620fa4 6 weeks ago 194.6 MB centos latest 2a332da70fd1 6 weeks ago 196.7 MB #ls docker_image_mysql.tgz blog.nvacg.org版权所有 #docker load < docker_image_mysql.tgz |
现在再看下主机2上的镜像列表
#docker images blog.nvacg.org版权所有 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql latest 497156b1e9e7 3 weeks ago 376.1 MB centos centos6 a0f8f0620fa4 6 weeks ago 194.6 MB centos latest 2a332da70fd1 6 weeks ago 196.7 MB |
至此,镜像mysql:latest成功导入主机2。
Load命令的格式为
docker load < 输入文件名.tgz
接下去将两台主机还原,来测试容器的导出和导入
导出容器可以使用docker的export命令,其格式和save是一致的
docker export -o 输出文件名.tgz 容器名称或容器ID
同样,先在主机1上执行export命令
#docker ps -a blog.nvacg.org版权所有 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9fa04b074651 mysql:latest "/bin/bash" 4 seconds ago Exited (0) 2 seconds ago mysql #docker export -o docker_cont_mysql.tgz mysql #ls docker_cont_mysql.tgz |
将docker_cont_mysql.tgz 传输至主机2,然后通过命令import导入容器
#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE #docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #ls docker_cont_mysql.tgz #docker import - mysql:latest < docker_cont_mysql.tgz 87d38ef3fabd91c5f4cf9573e18e76d3e4bb63ec67ebd813e1082ae62e34035d #docker images blog.nvacg.org版权所有 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql latest 87d38ef3fabd 15 seconds ago 348.1 MB #docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
Import命令的格式为
docker import – 镜像名称:版本 < 输入文件名.tgz
可以看到,虽然在主机1上我们导出的是一个已经经过修改但尚未提交变更为镜像的容器,但是用export命令导出再用import导入后,这个容器自动commit为了一个镜像。
利用export命令导出镜像可以省去commit容器到新镜像的麻烦,不过通过这种方式导入的镜像将不包含变更记录(可以通过 docker images –tree 来查看),通过save方式导出的镜像包含更详细的记录,这一点也可以从导入时指定的参数看出区别,当使用load方式导入save方式导出的tgz卷时不需要指定镜像的名称,而import导入export导出的tgz卷时则必须指定新镜像的名称,并且可以随意指定新镜像的名称。
请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。
本文链接地址: 初识DOCKER(8)–导入和导出