架构杂谈《八》

架构杂谈《八》 Docker 架构 
一、Docker 引擎的三大组件

  1)Docker 后台服务(Docker Daemon):是长时间运行在后台的守护进程,是Docker的核心服务,可以通过命令dockerd与它进行交互通信。

  2)REST 接口(REST API):程序可以通过REST的接口来访问后台服务或向它发送操作指令。

  3)交互式命令行界面(Docker CLI):我们大多数时间都在使用命令行界面与Docker进行交互(以docker为开头的所有命令的操作)而命令行界面又是通过调用REST的接口来控制和操作Docker后台服务的。

架构杂谈《八》

  Docker 是C/S结构的架构,客户端通过与后台服务交互来编译、运行和发布容器。Docker的客户端可以连接到本机的Docker服务上也可以连接到远程的Docker服务上。Docker客户端是使用REST接口来和后台服务通信的,它通过使用UNIX Socket连接或者网络接口实现。

架构杂谈《八》

  (1)Docker 后台服务监听REST接口的请求,管理Docker的对象(如:Docker的镜像、容器、网络和磁盘卷)。一个Docker后台服务可以和其他Docker后台服务进行通信。从而对它们进行管理。

  (2)Docker客户端(Docker Client)是我们和Docker后台服务交互的主要工具,在使用docker run 命令时,客户端把命令发送到Docker后台服务,再由后台服务执行该命令。Docker客户端可以连接多个后台服务并与它们通信。

  (3)Docker仓库(Docker Registry)是用来存储Docker镜像的,Docker Hub和Docker Cloud是所有人都能够使用的公共的Docker仓库。Docker默认从Docker Hub下载镜像,当然我们也可以自己搭建私有仓库。当我们使用 docker pull 或 docker run 命令时,就会从我们配置的 Docker 仓库下载镜像,当使用 docker push 命令时,我们的镜像会被推送到Docker仓库中。

  (4)Docker对象(Docker Object)包括镜像、容器、网络、磁盘卷和插件等。我们在使用Docker时,就会创建和使用Docker对象。

      a)镜像(image)是只读的指令模板,用于创建Docker容器(container)通常一个镜像会继承另一个镜像,然后扩展自定义的指令,如,我们可以创建一个继承自Ubuntu的镜像,再安装一个 Apache Tomcat服务和自己的应用程序,同时修改些配置使我们的程序能够运行起来。为了创建自己的镜像,我们可以创建一个Dockerfile文件,通过一些简单的指令来定义如何创建和运行镜像,Dockerfile中的每个指令在镜像中都会创建为一个层(layer),当我们修改Dockerfile文件然后重新编译它时,仅有那些被修改的层(layer)才会被重新编译,这就是Docker镜像是轻量级的、体积非常小、速度非常块的原因。

      b)容器(container)是镜像运行的一个实例,我们可以使用Docker的API或CLI来创建、运行、停止、移动或者删除容器。我们可以为容器绑定一个或多个网络(network)或挂载一个磁盘卷(volume),也可以通过继承它来创建一个新的镜像。通常一个容器与另一个容器或它的宿主机都是相对独立和隔离的。在容器停止运行后,它其中的所有改变的状态如果没有保存则都会消失。

      c)Docker服务(server)允许我们在多个Docker后台服务中伸缩扩展容器,这些容器组成一个拥有多主多从模式的集群。集群中的每个成员都是一个Docker后台服务,它们之间通过Docker接口通信。我们可以通过Docker服务来定义集群的参数,如:集群中容器的副本个数。在默认情况下,集群的负载是面向所有容器节点的。而对于使用者来说,Docker集群就像一个大实例。

  (5)命名空间(Namespace),Docker使用命名空间为容器提供了很好的隔离性,当我们运行容器时,Docker会为容器创建一组命名空间,每个容器都是一个独立的命名空间,容器仅仅限制于在自己的命名空间中访问权限。Docker使用了Linux的如下命名空间:

    a)pid 命名空间(pid namespace):用来隔离进程的ID空间,使得不同的pid命名空间里的进程ID可以重复且相互之间不受影响。

    b)net 命名空间(net namespace):用于管理网络协议栈的多个实例。

    c)ipc 命名空间(ipc namespace):用于管理和访问IPC资源。

    d)mnt 命名空间(mnt namespace):用于管理 文件系统的挂载点。

    e)uts 命名空间(uts namespace):用于隔离内核和版本信息。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspzgf.html