Docker镜像的创建、存出、载入的方法
这篇文章主要介绍了Docker镜像的创建、存出、载入的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。
基于已有镜像的容器创建
该方法是使用docker commit命令,其命令格式为:
1 | docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] |
主要参数选项包括:
-a ,–author=”” 作者信息
-m,–message=”” 提交信息
-p,–pause=true 提交是暂停容器运行
比如,先创建一个运行bash的ubuntu容器:
1 2 3 4 5 | docker run –it ubuntu /bin/bash root@d8990fec2141:/ # touch test root@d8990fec2141:/ # exit |
然后根据创建的这个容器来提交一个新的镜像,提交时需要用到容器ID。
1 | docker commit –m “ test ” –a “zmc” d8990fec2141 testimage |
如果成功的话,就会返回新镜像的长ID号,然后可以查看看在本地已有的镜像:
1 2 3 4 5 6 7 | docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE testimage latest baea98d5a437 About a minute ago 188.3 MB …… |
第三行就是刚刚创建的镜像。
PS:利用此容器创建的镜像Id与此容器的镜像id不同,可知它们不是同一镜像。
基于本地模板导入
也可以从操作系统模板文件导入一个镜像,比如使用OpenVZ提供的模板创建,OPENVZ下载模板在:http://openvz.org/Download/template/precreated。
我尝试使用了Ubuntu14.04的模板:
1 | wget http: //download .openvz.org /template/precreated/ubuntu-14 .04-x86_64-minimal. tar .gz |
下载完之后就可以导入了:
1 | sudo cat ubuntu–14.04–x86_64–minimal. tar .gz | docker import – ubuntu:14.04 |
其实只是两个命令,不过很显而易见,就不加解释了。成功的话,就会返回根据模板建立的镜像的长ID
1 2 3 | sudo cat ubuntu–14.04–x86_64–minimal. tar .gz | docker import – ubuntu:14.04 ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35 |
然后就可以查看本地的镜像:
1 2 3 4 5 6 7 8 9 | docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ab80404d13d5 56 seconds ago 215.4 MB testimage latest baea98d5a437 29 minutes ago 188.3 MB …. |
其实可以看出,虽然模板才75M,但创建的镜像并不小。
镜像的存出和载入
可以利用docker save和docker命令来存出和载入镜像。
存出镜像
如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:
1 2 3 4 5 6 7 8 9 10 11 | docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE testimage latest baea98d5a437 25 minutes ago 188.3 MB ubuntu latest fa81ed084842 3 days ago 188.3 MB …. docker save –o /data/testimage . tar testimage:latest |
上面的第6行就是存出代码,这时在/data下就有一个testimage.tar文件,这时我们把本地镜像rmi掉,然后尝试载入。
载入镜像
删除镜像之后的状态:
1 2 3 4 5 6 7 8 9 10 11 | ubuntu@VM–223–238–ubuntu: /data $ docker rmi baea98d5a437 Untagged: testimage:latest Deleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5b ubuntu@VM–223–238–ubuntu: /data $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ab80404d13d5 5 minutes ago 215.4 MB |
然后载入镜像:
1 2 3 4 5 6 7 8 9 | docker load —input testimage. tar docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MB testimage latest baea98d5a437 35 minutes ago 188.3 MB |
第一行就是载入镜像,还可以简化写成:
1 2 3 4 5 6 7 8 9 | docker load —input testimage. tar docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MB testimage latest baea98d5a437 35 minutes ago 188.3 MB |
载入操作将会导入镜像以及相关的元数据信息(包括标签等)。
镜像的上传
最后说点镜像的上传,镜像的管理方式非常像git,可以使用docker push命令上传自己本地镜像到仓库,默认上传到DockerHub官方仓库(需要登陆),命令格式:
1 | docker push NAME[:TAG] |
在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签:
1 2 3 | docker tag testimage:lastest zmc /testimage :lastest docker pushzmc /testimage :lastest |
有利于上传之后的区分。
我觉得无论是运维团队还是开发团队还是一个实验室,都有必要有一个自己的Docker仓库,可以存放符合自己需求的环境或系统镜像,可以实现快速部署。
以上就是本文的全部内容,希望对大家的学习有所帮助