初识DOCKER(8)–导入和导出

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)–导入和导出

发表评论

您的电子邮箱地址不会被公开。

*