[ Docker ] Docker image principles and core architecture

188 阅读2分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

image.png

微信公众号搜索 程序媛小庄 人生苦短 一起学Python

前言

前面的文章中介绍了docker镜像和容器的基本操作,可能会有小伙伴有疑问,docker时一个轻量级的,那为啥有些镜像特别的大呢?就需要了解docker镜像的分层原理。在使用docker pull的命令时,会首先在本地仓库中寻找,找不到才去远程仓库中下载,但是可以发先在下载过程中并不是只下载一个镜像 。

image-20210809095359604

镜像分层原理

首先看一下镜像的比较官方的定义,镜像是一种轻量级的可独立的软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、运行时所需要的库、环境变量和配置文件。

容器是属于操作系统级别的隔离,容器是镜像运行得到的,如果按照这种思路构建镜像的话,每个镜像都需要自己封装一个基础的操作系统依赖,如下图所示,就会导致每个镜像都非常的大,非常占用系统资源。

image-20210809100611791

因此docker将镜像尽可能的将镜像的公共部分单独抽取出来进行分层,并且尽可能的划分的更加细致,最底层的就是最公共的那一部分镜像。上图就可以简单转换为下面这样:当然在操作系统层面上可能还会进一步分层。

image-20210809100936288

所以总结来说一个镜像非常大的原因就是一个镜像不仅仅是原来的软件包,还包含软件包所需要的操作系统依赖、团建自身以来以及自身软件包组成。

docker在设计镜像时每一个镜像都是由N个镜像进行组成的,这样会最大程度的复用基础的重复的镜像,从而减少仓库的整体体积。这也是镜像分层原理,这种原理也叫UnionFs联合文件系统。

docker核心架构

在了解了镜像和容器的相关操作之后,可以总结出docker的核心架构图,该核心架构可以帮助我们更加清楚的对docker进行学习。(dockerfile在后面的文章中会介绍,欢迎大家关注哦)

image-20210809102354422

结语

文章首发于微信公众号程序媛小庄,同步于掘金

码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)