原文:https://blog.csdn.net/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-cn.com/engine/userguide/storagedriver/selectadriver/

3.1.1镜像继承(共享)

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

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

 
  1. FROM scratch

  2. COPY hello /

  3. CMD ["/hello"]

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

 
  1. FROM scratch

  2. ADD centos-7-docker.tar.xz /

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

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

  5. org.label-schema.vendor="CentOS"

  6. org.label-schema.license="GPLv2"

  7. org.label-schema.build-date="20181205"

  8. 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-cn.com/engine/userguide/storagedriver/aufs-driver/#example-image-and-container-on-disk-constructs
  • Docker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持)
    • https://www.cnblogs.com/wade-luffy/p/6589254.html#_label3
  • Docker联合文件系统Union File System
    • http://www.dockerinfo.net/1753.html

docker pull拉取镜像原理_Dockerfile镜像细节相关推荐

  1. 怎么解决docker pull拉取镜像速度过慢的问题

    怎么解决docker pull拉取镜像速度过慢的问题 参考文章: (1)怎么解决docker pull拉取镜像速度过慢的问题 (2)https://www.cnblogs.com/Cucucudebl ...

  2. docker pull拉取镜像_docker拉取镜像失败解决

    今天在虚拟机上安装了docker-ce之后,从docker官网上去拉取镜像时,报如下错误 [root@localhost util-linux-2.27]# docker pull mysql:8.0 ...

  3. Docker的使用(docker pull拉取镜像失败问题解决)

    在docker拉取Nginx镜像过程中,速度慢,或者不成功 报错代码: Error response from daemon: Get https://registry-1.docker.io/v2/ ...

  4. 【开发技术】2万字详细介绍Docker 和 web项目的部署监控,docker部署,拉取kafana,prometheus镜像监控

    SpringBoot 内容管理 Linux Redis Connnect 设置服务器redis开机自启动 修改Redis配置文件 关闭防火墙 关闭selinux 连接Redis Docker Dock ...

  5. MAC M1安装docker并拉取mysql镜像

    MAC M1安装docker并拉取mysql镜像 inter芯片和m1芯片安装docker方式些许不同,本次我只记录m1安装docker和拉取镜像 Docker常用命令 拉取镜像:docker pul ...

  6. Win10下安装docker并拉取redis镜像启动

    闲来无事学习新知识,准备学习一下当下比较热的docker,本篇主要介绍在win10系统下安装docker并拉取redis镜像进行启动,win10系统需要是专业版的,如果是家庭版则需要下载docker- ...

  7. pull 仓库 设置docker_docker镜像上传到阿里仓库,并在服务器pull拉取运行

    阿里云的镜像仓库目前免费.可以设置私有或者公开. 如图,在弹性计算分类中: 进去按照步骤申请命名空间和镜像. 剩下的操作非常简单,阿里云上教程也非常详细. 阿里云后台会给一个镜像的公网地址和公网域名, ...

  8. docker拉取不同架构的镜像如:x86拉取arm64的

    docker拉取不同架构的镜像如x86拉取arm64的 一:指定platform方式 首先修改docker的配置文件:vi /etc/docker/daemon.json 添加如下代码:"e ...

  9. 服务器安装docker,拉取一些常用镜像

    1.购买服务器(系统centos7.6) 2.在控制台中找到购买的服务器,设置密码,账号默认root 3.开放需要的端口,如nacos,redis等等  4.使用FinalShell连接服务器,输入服 ...

最新文章

  1. Learning to Rank简介
  2. 2020-10-27(汇编收获)
  3. 正序 逆序写 java_C語言版和JAVA版 把一個字節正序(高位在前)轉為逆序(低位在前) 和 逆序轉為正序...
  4. MySql的用户权限
  5. python做的游戏可以导出吗_Python for RenderDoc批量导出模型和贴图
  6. 获取 Windows 窗体 DataGridView 控件中选定的单元格、行和列
  7. RobotFramework下的http接口自动化post关键字的使用
  8. AtCoder Regular Contest 080
  9. 便利删除_知名便利店凉了?!刚刚道歉
  10. Elasticsearch笔记三之版本控制和插件
  11. ssh 本地转发 和远程转发 区别
  12. 关于vue-cli中-webkit-flex-direction: column失效问题
  13. 301.删除无效的括号
  14. ASP.NET网页显示LED字体 (转)
  15. python基础教程四级查数据_四六级成绩还可以这样查?Python助你装B一步到位!!!...
  16. 无线信道特性分析及建模仿真
  17. Qt 之 QQ系统表情—实现动态显示效果
  18. 字节跳动AI lab计算机视觉实习生面试教训
  19. leetcode33. 搜索旋转排序数组
  20. html5 safari浏览器 全屏显示 隐藏工具条,HTML5全屏API不IPhone SE Safari浏览器工作,也...

热门文章

  1. 机关事业单位工资管理业务分析
  2. ubuntu20.04系统出现 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu xenial Release“ 没有Release文件
  3. canvas 水滴图、液体进度条、仿加速球、圆球水波图
  4. 在校大学生免费获得jetbrains全家桶
  5. 谈谈IT行业的职业发展方向
  6. phpcms9.6 ueditor_PHPCMS v9.5.6整合UEditer1.4.3详细教程
  7. 微信企业号开发:主动发送消息
  8. js中自定义对象、json对象、json字符串、普通js对象
  9. 模块化UPS 怎一个“稳”字了得?
  10. 2.6 自定义srv python