浅谈对Docker的一些结构和理解

一. Docker整体结构

1.Docker引擎介绍(Docker Engine)

· 1.1 Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序

· 1.2 服务端:一个长时间运行的守护进程(Docker Daemon)

· 1.3 REST API: 一套用于与Docker Daemon通信并指示其执行操作的接口

· 1.4 客户端: 命令行接口CLI(Command Line Interface):

CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作,Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷) 如下图:
浅谈对Docker的一些结构和理解_第1张图片

2.Docker结构概览图

浅谈对Docker的一些结构和理解_第2张图片

Client端的这些命令是通过服务端API接口交给Docker Daemon解析,然后通过Registry(远程服务端)来执行命令,这些命令分别管理着对应的结构
除此之外,Client本地端可以通过修改DOCKER_HOST来连接其它的Server端,而一个服务端可以服务多个客户端,这是一个非常典型的C/S结构的应用程序

二. Docker底层结构


Docer使用Go语言实现的.

Docker利用Linux内核的几个特性来实现功能:

    1. 利用Linux的命名空间(Namespaces)

    2. 利用Linux控制组(Control Groups)

    3. 利用Linux联合文件系统(Union File Systems)

    这也就是意味着Docker只能在Linux环境下运行,在window、Mac上运行Docker,其实本质上是借助来虚拟化技术,然后在Linux虚拟机上运行的Docker程序.

容器格式(Container Format):

    Docker Engine将Namespaces、Cgroups、UnionFS进行组合后的一个package,就是一个容器格式

    Docker通过对这个package中的Namespaces、Cgroups、UnionFS进行管理实现的容器的创建和生命周期管理.容器格式有很多种,其中Docker使用的容器格式叫: libcontainer

对这三个特性具体的介绍:

1. Namespaces(命名空间): 为Docker容器提供操作系统层面的隔离
  1.1 进程号隔离:每一个容器内运行的第一个进程, 进程好总是从1开始起算
  1.2 网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的、也就是相当于两个网络
  1.3 进程间通隔离: 容器中进程与宿主机或其他容器中的进程是互补不可见的, 通信需要借助网络
  1.4 文件系统挂载隔离: 容器拥有自己单独的工作目录
  1.5 内核以及系统版本号隔离: 容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机
2.Control Groups(控制组): 为Docker提供硬件层面的隔离
  2.1 控制组能控制应用程序锁使用的硬件资源
  2.2 基于该性质, 控制组帮助docker引擎将硬件资源共享给容器使用,并加以约束和限制,比如控制器所使用的内存大小、cpu核数等等…
3.Union File Systems(联合文件系统): 利用layer(分层)思想来管理镜像和容器

关于docker核心技术,我会再另写一篇博客,此文章纯手打,如果转载需声明

你可能感兴趣的:(Docker,结构和底层,python)