Docker中的镜像

Docker中的镜像


1、镜像命名


在本机查看镜像:
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
learn/deploy_new    bloomfilterv0.1     33c4fc7846db        46 hours ago        196.2 MB
learn/deploy        latest              8acaaacef9e1        47 hours ago        209 MB


Repository下面有一系列打了tag的Image,每个Image有一个GUID,为了方便也可以通过Repository:tag来引用。


在Repository之上还有一个Registry。


Registry包含一个或多个Repository;
Repository包含一个或多个Image;
Image用GUID表示,有一个或多个Tag与之关联。


对于如下命令:
docker pull centos


其实相当于(Registry/Repository:Tag):
docker pull index.docker.io/library/centos:latest


最终下载的镜像都是:
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              7322fbe74aa5        10 weeks ago        172.2 MB


2、配置Registry Mirror(可跳过)


如果直接使用国外的Registry,速度会非常慢,为了提高下载速度,可以使用Registry Mirror:


在DaoCloud上注册后,执行下列命令安装daomonit:


curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s dad55b899168bebb5d622f1045cb7fb2f5ebe5df


卸载方法:dpkg -r daomonit;


看到如下提示表示安装成功,重启docker生效(sudo service docker restart):
...
[08/28/15 15:56:09] [INFO] You have successfuly configured your docker mirror.
[08/28/15 15:56:09] [INFO] You need to restart docker to enable the docker mirror
...


查看已修改的配置:
more /etc/default/docker
发现配置文件中多了一行:
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://8bfb7c60.m.daocloud.io"


这样就可以直接使用docker pull命令拉镜像了,除此之外不用关心任何问题,唯一的变化就是速度更快。


3、镜像的内容及存储位置


docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
91e54dfb1179        7 days ago          /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
d74508fb6632        7 days ago          /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.895 kB            
c22013c84729        7 days ago          /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB            
d3a1f33e8a5a        7 days ago          /bin/sh -c #(nop) ADD file:5a3f9e9ab88e725d60   188.2 MB            


可以看到直接下载的官方ubuntu镜像分4层。


查看每层的内容,Docker镜像层的内容一般在Docker根目录的aufs路径下,为/var/lib/docker/aufs/diff/:


进入该目录执行:


root@python-Lenovo:/var/lib/docker/aufs/diff# ls | xargs ls


...


91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c:


c22013c8472965aa5b62559f2b540cd440716ef149756e7b958a1b2aba421e87:
etc  sbin  usr var


d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391:
bin   dev  home  lib64 mnt  proc  run srv  tmp  var
boot  etc  lib media opt  root  sbin  sys  usr


d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82:
etc


...


可以看到91e的镜像层中不包含文件系统,其他3个层都包含文件,因为d74处在上层,因此etc的内容最终被d74中的etc覆盖。


每个镜像层还包含了一个json文件,json文件的存储路径为/var/lib/docker/graph:


root@python-Lenovo:/var/lib/docker/graph# ls | xargs ls


...


91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c:
json  layersize


c22013c8472965aa5b62559f2b540cd440716ef149756e7b958a1b2aba421e87:
json  layersize


d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391:
json  layersize


d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82:
json  layersize


...


layersize记录了镜像层内部文件内容的总大小。


看看镜像层91e的json内容:


root@python-Lenovo:/var/lib/docker/graph/91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c# more json
{"id":"91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c","parent
":"d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82","created":"
2015-08-20T20:21:15.767240511Z","container":"74bb7db8d212f77ab6d467b710451e54d2c
60533f641de8c91e7ef343b88a146","container_config":{"Hostname":"e611e15f9c9d","Do
mainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":f
alse,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOn
ce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"/bin/bash\"]"],"Image"
:"d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82","Volumes":nu
ll,"VolumeDriver":"","WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"
MacAddress":"","OnBuild":null,"Labels":{}},"docker_version":"1.7.1","config":{"H
ostname":"e611e15f9c9d","Domainname":"","User":"","AttachStdin":false,"AttachStd
out":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false
,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/bash"],"Image":"d74
508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82","Volumes":null,"V
olumeDriver":"","WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"MacAd
dress":"","OnBuild":null,"Labels":{}},"architecture":"amd64","os":"linux","Size"
:0}


4、镜像与容器的启动


容器的启动可以概括为以下两点:
Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,此时也就实现了静态向动态的转变。
Docker守护进程手握Docker镜像的json文件,为容器配置相应的环境,并真正运行Docker镜像所指定的进程,完成Docker容器的真正创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值