docker pull拉取镜像原理_Dockerfile镜像细节
原文: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中是一个基础镜像
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="20181205"
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镜像细节相关推荐
- 怎么解决docker pull拉取镜像速度过慢的问题
怎么解决docker pull拉取镜像速度过慢的问题 参考文章: (1)怎么解决docker pull拉取镜像速度过慢的问题 (2)https://www.cnblogs.com/Cucucudebl ...
- docker pull拉取镜像_docker拉取镜像失败解决
今天在虚拟机上安装了docker-ce之后,从docker官网上去拉取镜像时,报如下错误 [root@localhost util-linux-2.27]# docker pull mysql:8.0 ...
- Docker的使用(docker pull拉取镜像失败问题解决)
在docker拉取Nginx镜像过程中,速度慢,或者不成功 报错代码: Error response from daemon: Get https://registry-1.docker.io/v2/ ...
- 【开发技术】2万字详细介绍Docker 和 web项目的部署监控,docker部署,拉取kafana,prometheus镜像监控
SpringBoot 内容管理 Linux Redis Connnect 设置服务器redis开机自启动 修改Redis配置文件 关闭防火墙 关闭selinux 连接Redis Docker Dock ...
- MAC M1安装docker并拉取mysql镜像
MAC M1安装docker并拉取mysql镜像 inter芯片和m1芯片安装docker方式些许不同,本次我只记录m1安装docker和拉取镜像 Docker常用命令 拉取镜像:docker pul ...
- Win10下安装docker并拉取redis镜像启动
闲来无事学习新知识,准备学习一下当下比较热的docker,本篇主要介绍在win10系统下安装docker并拉取redis镜像进行启动,win10系统需要是专业版的,如果是家庭版则需要下载docker- ...
- pull 仓库 设置docker_docker镜像上传到阿里仓库,并在服务器pull拉取运行
阿里云的镜像仓库目前免费.可以设置私有或者公开. 如图,在弹性计算分类中: 进去按照步骤申请命名空间和镜像. 剩下的操作非常简单,阿里云上教程也非常详细. 阿里云后台会给一个镜像的公网地址和公网域名, ...
- docker拉取不同架构的镜像如:x86拉取arm64的
docker拉取不同架构的镜像如x86拉取arm64的 一:指定platform方式 首先修改docker的配置文件:vi /etc/docker/daemon.json 添加如下代码:"e ...
- 服务器安装docker,拉取一些常用镜像
1.购买服务器(系统centos7.6) 2.在控制台中找到购买的服务器,设置密码,账号默认root 3.开放需要的端口,如nacos,redis等等 4.使用FinalShell连接服务器,输入服 ...
最新文章
- Learning to Rank简介
- 2020-10-27(汇编收获)
- 正序 逆序写 java_C語言版和JAVA版 把一個字節正序(高位在前)轉為逆序(低位在前) 和 逆序轉為正序...
- MySql的用户权限
- python做的游戏可以导出吗_Python for RenderDoc批量导出模型和贴图
- 获取 Windows 窗体 DataGridView 控件中选定的单元格、行和列
- RobotFramework下的http接口自动化post关键字的使用
- AtCoder Regular Contest 080
- 便利删除_知名便利店凉了?!刚刚道歉
- Elasticsearch笔记三之版本控制和插件
- ssh 本地转发 和远程转发 区别
- 关于vue-cli中-webkit-flex-direction: column失效问题
- 301.删除无效的括号
- ASP.NET网页显示LED字体 (转)
- python基础教程四级查数据_四六级成绩还可以这样查?Python助你装B一步到位!!!...
- 无线信道特性分析及建模仿真
- Qt 之 QQ系统表情—实现动态显示效果
- 字节跳动AI lab计算机视觉实习生面试教训
- leetcode33. 搜索旋转排序数组
- html5 safari浏览器 全屏显示 隐藏工具条,HTML5全屏API不IPhone SE Safari浏览器工作,也...
热门文章
- 机关事业单位工资管理业务分析
- ubuntu20.04系统出现 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu xenial Release“ 没有Release文件
- canvas 水滴图、液体进度条、仿加速球、圆球水波图
- 在校大学生免费获得jetbrains全家桶
- 谈谈IT行业的职业发展方向
- phpcms9.6 ueditor_PHPCMS v9.5.6整合UEditer1.4.3详细教程
- 微信企业号开发:主动发送消息
- js中自定义对象、json对象、json字符串、普通js对象
- 模块化UPS 怎一个“稳”字了得?
- 2.6 自定义srv python