【Docker学习总结】2.Docker的基本组成介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013517797/article/details/83212681

上一篇总结我们介绍了Docker的基本信息、优点以及使用场景。本篇我们来介绍一下Docker的基本组成。

Docker包含了以下的几个部分:

Docker Client客户端
Docker Daemon守护进程
Docker Image镜像
Docker Container容器
Docker Registry仓库

整个C/S系统的服务架构如下图所示:

整个流程就是,Docker Client客户端发布请求指令,Docker Daemon守护进程接受指令(守护进程位于一台服务器),然后操作基于Docker Image镜像的Docker Container容器中的应用,同时Docker Registry仓库提供了另外叠加的Docker Image镜像文件系统。

一、Docker客户端/守护进程

Docker是C/S(客户端/服务器)架构的程序,Docker的客户端,向Docker的服务端(即守护进程)发出请求,守护进程处理完所有的工作,并返回结果。
Docker客户端对服务器端的访问,既可以是在本地,也可以通过远程来访问。
下图可以帮助我们很好理解Docker的C/S架构:

我们通过Docker客户端,执行各种命令,然后Docker客户端会将这些命令发送给守护进程。守护进程执行的结果,还会传回给客户端,使我们能够通过客户端,开查看命令运行的结果。

二、Docker Image镜像

镜像是Docker容器的基石,容器基于镜像启动和运行。镜像就好比容器的源代码,保存了用于启动容器的各种条件。
如果更深一层的剖析Docker的Image镜像,其是一个层叠的只读系统:

它的最底端,是一个引导文件系统,即bootfs。计算机系统中引导程序的作用是进行系统初始化工作,以及将OS的核心程序装入主存。这很像典型的Linux引导系统,而用户几乎不会和引导文件系统进行交互。
实际上,当一个容器启动后,它将会被引入到内存中,而引导文件系统会被卸载。

它的第二层,是rootfs(root文件系统),它位于引导文件之上。root文件系统可以是一种或者多种的操作系统,例如Ubuntu或Cent OS。在传统的Linux引导过程中,root文件系统以只读的方式加载,当引导结束并完成了完整性检查后,它才会被切换为读写模式。但是在Docker容器中,root文件系统永远只能为只读状态,并且Docker利用联合加载(union mount)技术,又会在root文件系统之上,加载更多的只读文件系统。联合加载的意思就是,一次同时加载多个文件系统,但是在外面看起来,只能看到一个文件系统。联合加载会将各层文件系统叠加到一起,让最终的文件系统,会包含所有的底层文件和目录。

Docker将这样的文件系统成为“镜像”。一个镜像可以放到另一个镜像的顶部,位于下面的镜像,称为父镜像,可以以此类推,直到镜像栈的最底部,而最底部的镜像,称为“基础镜像”。也就是上图的镜像栈中的rootfs文件系统。所有的层都会有一个指针指向下一层。

三、Docker Container容器

Docker Container容器是通过镜像启动的,Container容器是Docker的执行单元,容器中可以运行客户的一个或多个进程。
如果说镜像是Docker生命周期的【构建和打包阶段】,那么容器则是Docker生命周期的【启动和执行阶段】。

那么,容器是怎么通过镜像来启动的呢,看一下上面的镜像结构图:

当一个容器启动时,Docker会在容器的最顶层,加载一个读写文件系统,也就是一个可写的文件层。我们在Docker中运行的程序,就是在这个层中进行执行的。
当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。比如,我们想修改一个文件,这个文件首先会从读写层下面的只读层,复制到上面的读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏,这就是Docker中的一个重要技术,即“写时复制(copy on write)”,每个只读镜像层都是只读的,并且以后永远不会变化。
当创建一个新容器时,Docker会构建一个镜像栈,就像上图中展现的,在栈的最顶层添加可写层。这个读写层,加上下面的镜像层,以及一些配置数据,就构成了一个容器,也即是:容器 = 镜像 + 可读层。

容器的这种特点,加上镜像分层的框架,使我们可以快速的构建镜像,并允许包含我们自己的应用程序和服务的容器。

四、Docker Registry仓库

Docker用仓库来保存用户构建的镜像,仓库分为“公有”和“私有”两种。Docker公司自己提供了一个公有的仓库,叫做“Docker Hub”。我们可以在“Docker Hub”上去注册账号,分享并保存自己的镜像。目前“Docker Hub”已经有了非常丰富的镜像,所以我们也可以通过“Docker Hub”来查找我们需要的镜像,为我们节省很多的构建镜像的时间。
当然,我们也可以架设自己的私有仓库,后面会有所介绍。

回顾一下Docker的各个组成部分的关系:

我们通过客户端,来访问Docker的守护进程,从而操作Docker的容器,而容器是通过镜像来创建的,而镜像保存在仓库中。

下一篇将为大家介绍Docker容器技术所依赖的Linux内核技术----Namespace和CGroup技术,使我们更深入的了解Docker容器技术。


参考资料:
《极客学院Docker学习》教学视频
几张图帮你理解 docker 基本原理及快速入门:
https://www.cnblogs.com/SzeCheng/p/6822905.html

转载请注明出处:https://blog.csdn.net/acmman/article/details/83212681

猜你喜欢

转载自blog.csdn.net/u013517797/article/details/83212681