Eleght科技:Docker入门学习之Docker的5大基本组成详细解剖

宝马娱乐在线城

2018-02-21 10:12:28

上期中给大家分享了Docker是什么,不知简洁的语言介绍朋友你是否能看的明白,自我感觉比官方的手册简单易读,本期Eleght科技接着给大家分享一下Docker学习的进阶:Docker的基本组成。

Docker客户端和守护进程

Docker是一个C/S架构的程序,Docker客服端向Docker服务器端,也就是Docker的守护进程发出请求,守护进程处理完所有的进程并返回结果,Docker服务端对客服端的访问既可以是在本地,也可以通过远程来访问。

我们在Docker客服端执行各种命令,然后Docker客服端会将这些命令发送到守护进程,守护进程执行的结果会传会给客户端,这样就可以使我们能通过客服端来查看命令执行的结果。

如图1-1所示,我们就可以看到这个流程,结合我说的应该就不难理解了。

1-1

Docker Image 镜像

镜像是Docker容器的基石,容器基于镜像才能启动运行,镜像就好比容器的源代码,保存了用于容器启动的各种条件。

再深一层的了解Docker镜像,Docker镜像是一种层叠的只读文件系统,最底端是一个引导文件系统,即bootfs,这很像典型的Linux引导系统,但是Docker用户几乎不会与引导系统有交互,实际上当一个容器启动后它将会被移到内存中,,而引导文件系统会直接被卸载掉。

Docker的第二层是root文件系统,它位于引导文件系统之上,root文件系统可以是一种或多种的操作系统,比如ubtunu、centos,在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查后,它才会切换为读写模式。但是在Docker里,root文件系统永远只为只读模式,并且Docker利用联合加载技术会在root文件系统之上加载更多的只读文件系统。

配图,缓解疲劳,此文信息量比较大

联合加载,指的是一次加载多个文件系统,但是在外面看起来只能看到一个文件系统,联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有的底层文件和目录,Docker将这样的文件系统称为镜像。

一个镜像可以放到另一个镜像的底部,位于下方的镜像成为副镜像,可以以此类推,最底部的镜像称为基础镜像。

我做了一幅图,大家可以参考一下,如图1-2所示

1-2

Docker Container 容器

Docker的容器是通过镜像启动,Docker的容器是Docker的执行来源,容器中可以运行客户的一个或多个进程,如果说镜像是Docker的搭建阶段,那么容器则是Docker的启动和执行阶段,那么容器是怎样通过镜像来启动的呢?

也就是我上面的那幅图,他会在镜像的最顶层加载一个读写文件系统,也就是一个可写的文件层,我们在Docker中运行的程序,就是在这个可写层中运行和执行的,当Docker第一次启动容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层中。

这里会牵扯到一个专有名词:写时复制

比如我们修改一个文件时,文件首先会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,但是已经被读写层中的副本所隐藏,这就是docker中的一个重要技术,即写时复制,每个镜像层都是只读的,并且永远不会变化,当创建一个新容器时,Docker会构建出一个镜像站,就像图1-3所表现的

1-3

在镜像站的最顶层,添加这个可写层,读写层加上下面的镜像层以及一些配置数据,就构成了一个容器,容器的这种特点加上镜像分层的框架,使我们能够快速的构建镜像并包含我们自己的应用程序和服务的容器。

可能这样讲起来会有点绕口,大家多读几遍自己尝试理解一下。

Docker Registry 仓库

最后一部分就是Docker Registry 仓库,Docker用仓库来保存用户创建的镜像,仓库分为公有和私有两种

Docker官方自己提供了一个公有的仓库,叫做Docker Hub,我们可以在Dock Hub上注册账号分享和保存我们自己的镜像,Dock Hub上提供了非常多并且丰富的镜像版本,所以我们可以在Docker Hub搜索我们所需要的镜像为我们节省构建镜像的时间。

当然我们也可以自己搭建私有的仓库,这个我们以后会提及到的。下图表示了仓库与注册服务器的关系

1-4

最后,我以一张图来给本文最后一个总结回顾,读完上文中大家应该都能看懂这幅图了

1-5

好了,Docker的五大组成部分已经讲完了,大家都理解了吗,有些地方也是比较绕口,大家琢磨一下,到本期为止我们对于Docker的认识已经讲完了,下期我们来“在线”实践一下,如何来正确的安装Docker,此安装非比其他安装,敬请关注下一期,Eleght科技,一个分享技术的头条号!

Eleght科技