小知识:深入理解docker镜像的分层(小白必看)

大家好,今天分享docker镜像分层理解

我们拉取Redis 镜像

[root@localhost ~]# docker pull redis Using default tag: latest latest: Pulling from library/redis a2abf6c4d29d: Pull complete c7a4e4382001: Pull complete 4044b9ba67c9: Pull complete c8388a79482f: Pull complete 413c8bb60be2: Pull complete 1abfd3011519: Pull complete Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339 Status: Downloaded newer image for redis:latest docker.io/library/redis:latest

我们发现整个下载的过程里,它是一层一层的

查看Redis 镜像具体信息

[root@localhost ~]# docker inspect redis:latest [ { “Id”: “sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631”, “RepoTags”: [ “redis:latest” ], “RepoDigests”: [ “redis@sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339” ], “Parent”: “”, “Comment”: “”, “Created”: “2021-12-21T12:42:49.755107412Z”, “Container”: “13d25f53410417c5220c8dfe8bd49f06abdbcd69faa62a9b877de02464bb04a3”, “ContainerConfig”: { “Hostname”: “13d25f534104”, “Domainname”: “”, “User”: “”, “AttachStdin”: false, “AttachStdout”: false, “AttachStderr”: false, “ExposedPorts”: { “6379/tcp”: {} }, “Tty”: false, “OpenStdin”: false, “StdinOnce”: false, “Env”: [ “PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”, “GOSU_VERSION=1.12”, “REDIS_VERSION=6.2.6”, “REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz”, “REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab” ], “Cmd”: [ “/bin/sh”, “-c”, “#(nop) “, “CMD [“redis-server”]” ], “Image”: “sha256:e093f59d716c95cfce82c676f099b960cc700432ab531388fcedf79932fc81ec”, “Volumes”: { “/data”: {} }, “WorkingDir”: “/data”, “Entrypoint”: [ “docker-entrypoint.sh” ], “OnBuild”: null, “Labels”: {} }, “DockerVersion”: “20.10.7”, “Author”: “”, “Config”: { “Hostname”: “”, “Domainname”: “”, “User”: “”, “AttachStdin”: false, “AttachStdout”: false, “AttachStderr”: false, “ExposedPorts”: { “6379/tcp”: {} }, “Tty”: false, “OpenStdin”: false, “StdinOnce”: false, “Env”: [ “PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”, “GOSU_VERSION=1.12”, “REDIS_VERSION=6.2.6”, “REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz”, “REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab” ], “Cmd”: [ “redis-server” ], “Image”: “sha256:e093f59d716c95cfce82c676f099b960cc700432ab531388fcedf79932fc81ec”, “Volumes”: { “/data”: {} }, “WorkingDir”: “/data”, “Entrypoint”: [ “docker-entrypoint.sh” ], “OnBuild”: null, “Labels”: null }, “Architecture”: “amd64”, “Os”: “linux”, “Size”: 112691373, “VirtualSize”: 112691373, “GraphDriver”: { “Data”: { “LowerDir”: “/var/lib/docker/overlay2/4330f4d6227b69d1b63675442c8f1fba885046258dcc61d06b2caf176346ac04/diff:/var/lib/docker/overlay2/c2340e727d1c72a5a374c3bc67edb4dc5af45b6c279d949d29e1897262e97d97/diff:/var/lib/docker/overlay2/0890ec7ba8ff12ab8b6b4c392f2b9322ecdb32afdf007e59cbaf1bb9b9954f3d/diff:/var/lib/docker/overlay2/3aee3ca28a64f4b825818c5883ec948d2006b683ce7890716c805b2023540ddf/diff:/var/lib/docker/overlay2/d3b24bd8a350d442e19251f859b45944c5b4af538476f0f5184a3143a7b1debf/diff”, “MergedDir”: “/var/lib/docker/overlay2/28334f5d377c08e8e8d83eaa61d10c424ffbc9367ca7d4c5a2f644d99e22418c/merged”, “UpperDir”: “/var/lib/docker/overlay2/28334f5d377c08e8e8d83eaa61d10c424ffbc9367ca7d4c5a2f644d99e22418c/diff”, “WorkDir”: “/var/lib/docker/overlay2/28334f5d377c08e8e8d83eaa61d10c424ffbc9367ca7d4c5a2f644d99e22418c/work” }, “Name”: “overlay2” }, “RootFS”: { “Type”: “layers”, “Layers”: [ “sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f”, “sha256:9b24afeb7c2f21e50a686ead025823cd2c6e9730c013ca77ad5f115c079b57cb”, “sha256:4b8e2801e0f956a4220c32e2c8b0a590e6f9bd2420ec65453685246b82766ea1”, “sha256:529cdb636f61e95ab91a62a51526a84fd7314d6aab0d414040796150b4522372”, “sha256:9975392591f2777d6bf4d9919ad1b2c9afa12f9a9b4d260f45025ec3cc9b18ed”, “sha256:8e5669d8329116b8444b9bbb1663dda568ede12d3dbcce950199b582f6e94952” ] }, “Metadata”: { “LastTagTime”: “0001-01-01T00:00:00Z” } } ]

观察这一块

“RootFS”: { “Type”: “layers”, “Layers”: [ “sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f”, “sha256:9b24afeb7c2f21e50a686ead025823cd2c6e9730c013ca77ad5f115c079b57cb”, “sha256:4b8e2801e0f956a4220c32e2c8b0a590e6f9bd2420ec65453685246b82766ea1”, “sha256:529cdb636f61e95ab91a62a51526a84fd7314d6aab0d414040796150b4522372”, “sha256:9975392591f2777d6bf4d9919ad1b2c9afa12f9a9b4d260f45025ec3cc9b18ed”, “sha256:8e5669d8329116b8444b9bbb1663dda568ede12d3dbcce950199b582f6e94952” ] },

截图:

%小知识:深入理解docker镜像的分层(小白必看)-猿站网-插图

这就是它一条一条的记录

看这个图

这就是一个基本的docker 镜像的层级

%小知识:深入理解docker镜像的分层(小白必看)-1猿站网-插图

可以将docker 镜像看成一个整体

所有的docker 镜像都是一个 基础镜像(可以理解为依托点),在基础镜像的层次和基础之上,所做的修改以及增加的功能,都会生成新的一层

在上面的这个图当中,我们就是在Ubuntu 16.04 这个镜像的基础之上安装Python,所以它就会变成一个二层的整体,再次在上面加上安全补丁,它就会变成个三层的整体, 就是说此时的这个镜像是一个三层的镜像,我们在使用和运行的运行中,就可以看见我们安装的Python和安全补丁

%小知识:深入理解docker镜像的分层(小白必看)-2猿站网-插图

画个图:

解释一下:

这个实例当中的镜像有三层

一层自己有文件1,文件2, 文件3 文件4

二层在一层的基础上加上文件5,文件6, 文件7 文件8

三层在二层的基础上加上文件10,文件11

在这里,二层默认除了有自己的东西以外,默认有一层的所有文件

三层默认除了有自己的东西以外,默认有二层的所有文件

就是说,二层全部的东西有 文件1 文件2 文件3 文件4 文件5 文件6 文件7 文件8

三层全部的东西有 文件1 文件2 文件3 文件4 文件5 文件6 文件7 文件8 文件9 文件10 文件11

这个实例 镜像最终包含了 这11个文件

各层之间是独立的,各层之间重复的东西是共用的,也就是关于的部分不用再下载了

这就是docker 镜像分层的概念

“RootFS”: { “Type”: “layers”, “Layers”: [ “sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f”, “sha256:9b24afeb7c2f21e50a686ead025823cd2c6e9730c013ca77ad5f115c079b57cb”, “sha256:4b8e2801e0f956a4220c32e2c8b0a590e6f9bd2420ec65453685246b82766ea1”, “sha256:529cdb636f61e95ab91a62a51526a84fd7314d6aab0d414040796150b4522372”, “sha256:9975392591f2777d6bf4d9919ad1b2c9afa12f9a9b4d260f45025ec3cc9b18ed”, “sha256:8e5669d8329116b8444b9bbb1663dda568ede12d3dbcce950199b582f6e94952” ] },

和这个意思是一样的的

一个新的科

docker 容器都是可读的,当容器启动的时候,一个新的可写层加载到容器顶部,这个新的镜像层,就是我们的容器层,在容器层之下,

就是我们的镜像层

我们在容器当中操作的就是我们的容器层,而我们如果想要打包这个容器给别人使用 ,要将镜像层和容器层一起和起来进行打包

%小知识:深入理解docker镜像的分层(小白必看)-3猿站网-插图

这就是docker 镜像分层的整个过程,好了有关于docker镜像的分层理解就到这里了,谢谢大家了

到此这篇关于深入理解docker镜像的分层(小白必看)的文章就介绍到这了,更多相关docker镜像分层内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/weixin_47556601/article/details/123443182

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:聊聊kubernetes1.20用containerd替换docker(shim)的问题

2023-3-9 13:14:51

建站知识

小知识:docker实现MySQL数据同步的方法

2023-3-9 13:29:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索