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):
...
You have successfuly configured your docker mirror.
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:
etcsbinusr var
d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391:
bin devhomelib64 mntprocrunsrvtmpvar
bootetclib mediaoptrootsbinsysusr
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:
jsonlayersize
c22013c8472965aa5b62559f2b540cd440716ef149756e7b958a1b2aba421e87:
jsonlayersize
d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391:
jsonlayersize
d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82:
jsonlayersize
...
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]