设为首页 收藏本站
查看: 987|回复: 0

[经验分享] Docker中的镜像

[复制链接]

尚未签到

发表于 2015-10-13 09:25:29 | 显示全部楼层 |阅读模式
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  runsrv  tmp  var
boot  etc  lib mediaopt  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容器的真正创建。

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126134-1-1.html 上篇帖子: docker run --lxc-conf 配置项使用 下篇帖子: 将Docker安装到CentOS或Fedora上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表