Docker基本概念

镜像 (image)

定义:一个镜像代表一个软件,比如Mysql镜像、Redis镜像、Nginx镜像,每个镜像都有其对应的版本。

容器 (container)

定义:基于某个镜像运行一次,就会产生一个程序实例,这个实例就称之为容器,一个镜像可以产生N个容器。

仓库 (repository)

定义:用来存储Docker所有镜像,包括官方镜像和个人开发者上传的镜像。

远程仓库Docker在世界范围内维护的一个唯一的远程仓库。
本地仓库当前自己机器中从远程仓库下载的镜像所存储的位置。

镜像、容器、仓库关系图
image.png
Docker镜像原理

Docker镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、运行时的依赖库,环境变量和配置文件。

Docker镜像问什么这么大?

Docker采用UnionFS(联合文件系统)文件系统,UnionFS是一种分层,轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,UnionFS文件系统是Docker镜像的基础,这种文件系统的特性是:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统就会包含所有底层的文件和目录。所以Docker镜像才会很大。

Docker镜像构成

Docker镜像的最底层是bootfs(boot file system) ,bootfs包含bootloader和kernel,Linux刚启动时会加载bootfs文件系统,这时由bootloader引导加载kernel,将整个内核加载到内存中。
在bootfs之上是rootfs(root file system),rootfs就是各种不同的操作系统发行版,比如Ubuntu/Centos等,rootfs主要包含/dev,/bin,/etc等标准目录和文件,由于Linux不同发行版本的bootfs是一致的,但是rootfs会有所差别,因此不同的发行版本可以共用bootfs。
在rootfs之上,是各种软件的依赖库,以mysql为例,mysql5.7和mysql8.0所依赖的库肯定有所不同,所以不同版本的软件有相应的依赖库,最上层的就是各种版本具体的软件,如下图所示:


image.png
Docker镜像为什么采用分层结构

Docker采用分层结构最大的好处就是资源共享,减少整个仓库的整体体积。比如所有的镜像都是基于bootfs构建,那么宿主机只需在磁盘中保存一份bootfs镜像,同时内存中也只需要加载一份bootfs镜像,就可以为所有容器服务。而且镜像的每一层都可以被共享。
Docker镜像是只读的,当镜像运行时,一个新的可写层被加载到镜像的顶部,这一层通常被称为容器层,容器层之下都叫镜像层。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容