失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > docker pull拉取镜像原理_Dockerfile镜像细节

docker pull拉取镜像原理_Dockerfile镜像细节

时间:2023-08-13 15:28:43

相关推荐

docker pull拉取镜像原理_Dockerfile镜像细节

原文:/weixin_31244053/article/details/112206093

docker pull nginx:1.13 # 观察下面拉取进度条有几个

Trying to pull repository docker.io/library/nginx ...

1.13: Pulling from docker.io/library/nginx

f2aa67a397c4: Pull complete

3c091c23e29d: Pull complete

4a99993b8636: Pull complete

Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35

Status: Downloaded newer image for docker.io/nginx:1.13

docker history nginx:1.13 # 查看多少层

IMAGE CREATED CREATED BY SIZE COMMENT

ae513a47849c 2 years ago/bin/sh -c #(nop) CMD ["nginx" "-g" "daem... 0 B

<missing>2 years ago/bin/sh -c #(nop) STOPSIGNAL [SIGTERM]0 B

<missing>2 years ago/bin/sh -c #(nop) EXPOSE 80/tcp 0 B

<missing>2 years ago/bin/sh -c ln -sf /dev/stdout /var/log/ngi... 22 B

<missing>2 years ago/bin/sh -c set -x && apt-get update && a... 53.7 MB

<missing>2 years ago/bin/sh -c #(nop) ENV NJS_VERSION=1.13.12... 0 B

<missing>2 years ago/bin/sh -c #(nop) ENV NGINX_VERSION=1.13.... 0 B

<missing>2 years ago/bin/sh -c #(nop) LABEL maintainer=NGINX ... 0 B

<missing>2 years ago/bin/sh -c #(nop) CMD ["bash"] 0 B

<missing>2 years ago/bin/sh -c #(nop) ADD file:ec5be7eec56a749... 55.3 MB

# 因为其他的层没有大熊 所以最终的进度条只有两个 但是 dockerfile的命令确实是有这么多

#还可以发现一点:Dockerfile有多少条命令,那就有多少个镜像层(不信你数数)

---------------下面是docker镜像和dockerfile深入的一些原理 有兴趣可以看看

三、Docker镜像的特点

关于Docker镜像,有以下特点:

Dockerfile生成呈现层级结构每层镜像包含:镜像文件以及镜像json元数据信息

图像来源: http:// open.daocloud.io/allen- tan-docker-xi-lie-zhi-shen-ke-li-jie-docker-jing-xiang-da-xiao/

3.1镜像呈现层级结构

联合文件系统(UnionFS)是实现Docker镜像的技术基础。在Docker中一般使用是AUFS(Another Union File System或Advanced Multilayered Unification File System)【具体还是得看宿主机用的什么系统】。

在搜索中文资料的时候,常常会发现有类似的解释:

“AUFS是一种 Union FS, 简单来说就是“支持将不同目录挂载到同一个虚拟文件系统下的文件系统”, AUFS支持为每一个成员目录设定只读(Rreadonly)、读写(Readwrite)和写(Whiteout-able)权限。Union FS 可以将一个Readonly的Branch和一个Writeable的Branch联合在一起挂载在同一个文件系统下”。

看得我一头雾水....后来去官方文档介绍AUFS:

AUFS is a union filesystem, which means that it layers multiple directories on a single Linux host and presents them as a single directory. These directories are called branches in AUFS terminology, and layers in Docker terminology

说白了,还是可以理解成:Docker的镜像的基础是联合文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,外界看到的是最外层的镜像。(比如外界只看到Tomcat镜像,而中间叠加了很多层镜像)

(这里只是拿AUFS说明,Docker实际上支持很多存储驱动,比如还有devicemapper,overlay2(Ubuntu的14.04.4或更高版本,16.04或更高版本), overlay,zfs

https://docs.docker-/engine/userguide/storagedriver/selectadriver/

3.1.1镜像继承(共享)

Docker镜像可以通过分层来进行继承

例如,hello-world的Dockerfile镜像FROM scratch镜像,scratch在Docker中是一个基础镜像

FROM scratch

COPY hello /

CMD ["/hello"]

Centos的Dockerfile镜像也是FROM scratch镜像:

FROM scratch

ADD centos-7-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0"

org.label-schema.name="CentOS Base Image"

org.label-schema.vendor="CentOS"

org.label-schema.license="GPLv2"

org.label-schema.build-date="1205"

CMD ["/bin/bash"]

那么Centos镜像和hello-world共享同一个基础镜像层scratch,提高了存储效率

再说个例子,比如我们有一个Centos镜像,这个镜像大小是202M。然后,我们基于Centos镜像手动往里边添加一个Tomcat(假设这个Tomcat的大小是300M),生成一个镜像,总大小就是502M了。

如果仅仅是单纯的累加这两个镜像的大小:202M+502M=704M,但是由于镜像复用的存在,实际占用的磁盘空间大小是:202M+300M=502M

AUFS uses the Copy-on-Write (CoW) strategy to maximize storage efficiency and minimize overhead。

如果想要了解COW,不妨阅读我之前写过的文章:

COW奶牛!Copy On Write机制了解一下CopyOnWriteArrayList你都不知道,怎么拿offer?

3.2json文件

Docker每一层镜像的json文件,都扮演着一个非常重要的角色,其主要的作用如下:

记录 Docker 镜像中与容器动态信息相关的内容记录父子 Docker 镜像之间真实的差异关系弥补 Docker 镜像内容的完整性与动态内容的缺失

Docker镜像的json文件可以认为是镜像的元数据信息

最后

今天简单地聊了一下Docker镜像的一些细节,但没去深入了解,想要继续深入的同学还得通过官方文档等途径去学习哈。

参考资料:

Allen 谈 Docker http://open.daocloud.io/tag/allen-tan-docker/官方文档介绍AUFS https://docs.docker-/engine/userguide/storagedriver/aufs-driver/#example-image-and-container-on-disk-constructsDocker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持) /wade-luffy/p/6589254.html#_label3Docker联合文件系统Union File System /1753.html

如果觉得《docker pull拉取镜像原理_Dockerfile镜像细节》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。