建立镜像的方法有三种:基于已有镜像的容器建立、基于本地模板导入、基于Dockerfile建立,本博文讲解前两种。git
该方法是使用docker commit命令,其命令格式为:github
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
主要参数选项包括:docker
好比,先建立一个运行bash的ubuntu容器:ubuntu
docker run –it ubuntu /bin/bashroot@d8990fec2141:/# touch testroot@d8990fec2141:/# exit
而后根据建立的这个容器来提交一个新的镜像,提交时须要用到容器ID。bash
docker commit –m “test” –a “zmc” d8990fec2141 testimage
若是成功的话,就会返回新镜像的长ID号,而后能够查看看在本地已有的镜像:运维
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 About a minute ago 188.3 MB……spa
第三行就是刚刚建立的镜像。操作系统
PS:利用此容器建立的镜像Id与此容器的镜像id不一样,可知它们不是同一镜像。.net
也能够从操做系统模板文件导入一个镜像,好比使用OpenVZ提供的模板建立,OPENVZ下载模板在:http://openvz.org/Download/template/precreated。3d
我尝试使用了Ubuntu14.04的模板:
1
|
wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
|
下载完以后就能够导入了:
sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04
其实只是两个命令,不过很显而易见,就不加解释了。成功的话,就会返回根据模板创建的镜像的长ID
sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35
而后就能够查看本地的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 56 seconds ago 215.4 MBtestimage latest baea98d5a437 29 minutes ago 188.3 MB….
其实能够看出,虽然模板才75M,但建立的镜像并不小。
能够利用docker save和docker命令来存出和载入镜像。
若是想要把镜像存出到本地文件,可使用docker save命令,例如,存出本地的刚才建立的testimage:lastest为镜像文件testimage.tar文件:
docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtestimage latest baea98d5a437 25 minutes ago 188.3 MBubuntu latest fa81ed084842 3 days ago 188.3 MB….docker save –o /data/testimage.tar testimage:latest
上面的第6行就是存出代码,这时在/data下就有一个testimage.tar文件,这时咱们把本地镜像rmi掉,而后尝试载入。
删除镜像以后的状态:
ubuntu@VM–223–238–ubuntu:/data$ docker rmi baea98d5a437Untagged: testimage:latestDeleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5bubuntu@VM–223–238–ubuntu:/data$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 5 minutes ago 215.4 MB
而后载入镜像:
docker load —input testimage.tardocker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ab80404d13d5 6 minutes ago 215.4 MBtestimage latest baea98d5a437 35 minutes ago 188.3 MB
第一行就是载入镜像,还能够简化写成:
docker load < testimage.tar
载入操做将会导入镜像以及相关的元数据信息(包括标签等)。
最后说点镜像的上传,镜像的管理方式很是像git,可使用docker push命令上传本身本地镜像到仓库,默认上传到DockerHub官方仓库(须要登录),命令格式:
docker push NAME[:TAG]
在上传以前通常会先为本身的镜像添加带本身名字(做者信息)的标签:
docker tag testimage:lastest zmc/testimage:lastestdocker pushzmc/testimage:lastest
有利于上传以后的区分。
我以为不管是运维团队仍是开发团队仍是一个实验室,都有必要有一个本身的Docker仓库,能够存放符合本身需求的环境或系统镜像,能够实现快速部署。
转自:梦续代码