Docker运行容器需要本地存在相应的镜像,如果镜像不存在,则Docker默认会从公共注册服务器Docker Hub中的仓库去下载相应的镜像,用户可以通过修改配置,使用自定义的镜像仓库。
1.获取镜像
使用docker pull 命令从网络上下载镜像,命令格式为:docker pull NAME[:TAG],对于Docker镜像,如果不显示指定TAG,则默认会选择latest标签下载仓库中最新版本的镜像。
如图片所示,镜像文件一般由若干层组成,冒号前面的字符串代表了每一层的ID。下载过程之中会获取并输出各个层的信息。层(Layer)其实是AUFS(Advanted Union File System)联合文件系统,是实现增量保存和更新的基础。
如果要下载某个版本的镜像,则:docker pull ubuntu:14.04
默认是从公共注册服务器的仓库中去下载指定tag的镜像,这个命令的完整命令:docker pull registry.hub.docker.com/ubuntu:latest
用户也可以指定从其他的注册服务器仓库中去下载:docker pull dl.dockerpool.com:5000/ubuntu:latest
镜像下载完成之后,即可以使用docker run -i -t ubuntu /bin/bash
如上命令即利用镜像ubuntu创建了一个容器,并在其中运行bash应用。2.查看镜像信息
使用docker images 命令列出当前主机上所有的镜像
列表中的字段含义- REPOSITORY:来自于哪个仓库 - TAG:镜像版本 - IMAGE ID:镜像ID(镜像ID唯一标识了镜像,TAG标记了镜像在同一个仓库的不同版本) - CREATED:创建时间 - VIRTUAL SIZE:镜像大小
docker tag命令为本地镜像添加一个tag
可以看到本地的镜像列表中多了一个刚刚打的tag为tag_test的镜像,但是它与latest的IMAGE ID是完全一致的,也就是说他们其实都指向的同一个镜像文件,只是别名不同而已。
使用docker inspect命令可以获取镜像的详细信息
如:docker inspect c917d6497f55在指定镜像ID的时候,还可以使用镜像ID字符串的前几个可区分镜像的字符串来代替,而不需要将整个完整大镜像ID放在这里。
3.搜寻镜像
使用docker search命令来查询远端注册服务器的镜像,如:docker search mysql
docker search默认从官方仓库中去搜索镜像,如上图所示为执行docker search mysql命令,搜寻到的详细信息。从字段看出,搜索结果中包含了镜像的名称、描述、星级、是否官方创建、是否自动创建等信息,默认输出结果按照星级评价进行排序。官方镜像说明是官方项目创建和维护的,automated资源则允许用户验证镜像的来源和内容。
4.删除镜像
docker rmi IMAGE [IMAGE…],其中IMAGE可以为镜像标签或者镜像ID,
如果一个镜像有过个TAG, 那么通过 docker rmi imagename:tagname的方式进行删除时,只是删除了该镜像的一个标签而已,而实际的镜像文件并没有被删除,但是如果使用docker rmi imageid的方式,则直接就删除了镜像文件,因为不同的标签指向的镜像ID是相同且唯一的。原因:容器是基于镜像在镜像上加的一层可读写层。
删除镜像时,docker将会删除这个镜像文件的所有AUFS层。
注意:使用镜像ID进行镜像删除时,如果基于该镜像的容器还存在时,镜像文件是无法删除的。
使用docker rmi -f 镜像ID的方式可以强行删除镜像,但是这种方式会造成一些遗留问题,因此不推荐。
正确的删除步骤是,应该先将该镜像的所有的容器全部删除之后,再删除镜像。
docker rm 命令删除容器时,后跟多个容器ID可一同删除,删除镜像文件时,从上图可以看到镜像的AUFS层也被全部删除。5.创建镜像
A.基于已有镜像的容器创建
使用docker commit 提交一个修改后的容器到仓库:
1. 使用docker run -it ubuntu:latest /bin/bash 基于ubuntu镜像在本地启动一个容器 2. 进入容器后,执行touch test 生成一个新的文件test 3. 此时容器即已经被修改, exit退出容器 4. docker commit --help查看用法:
-a:参数指定作者 -m:指定消息内容 -p:提交时,是否暂停容器运行,默认是的
执行如下的commit命令,提交动作执行之后,生成一个新的ID为新镜像ID
提交时,如果不指定tag,则默认为latestB.基于本地模版导入
可以从http://download.openvz.org/template/precreated网站上去下载一些docker模版
wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz
这里下载速度比较慢,因此使用了本地已经存放的一个模版文件
C.基于Dockerfile创建
6.存出和载入镜像
分别使用docker save 和 docker load 命令在存出和载入镜像
A.存出镜像:
使用docker save –help命令查看docker save 的用法。执行导出后,可以看到在当前目录之下生成的导出模版文件:tomcat.tar.gzB.载入镜像:
a.先删除本地镜像中的tomcat
b.导入刚刚存出的tomcat.tar.gz文件到本地的镜像列表之中
c.载入镜像之后,可以看到镜像列表中没有对应的仓库和标签名称,即没有所谓的镜像元数据信息(还可以使用docker load < tomcat.tar.gz来完成载入)
d.上传镜像(这里测试上传到docker hub官网),需要在该网站上注册用户,并创建仓库
e.然后 docker push 上传镜像
也可以自己在内网搭建一个私有的docker注册服务器,来存放私有仓库。