Skip to content

Docker核心组成与Docker Engine简介


在Docker中,我们往往不会直接操作基于Linux的Namespace、CGroups,Union File System等这些底层资源分配和调度相关的操作,在日常使用中,我们操作的更多的是镜像、容器、网络和数据卷

镜像 (Image)

镜像是只读的,包含了程序运行所必要的初始环境的文件系统。

Docker使用的AUFS(Advanced Union FIle System)使得其能实现增量式的镜像系统。

每个镜像下拥有多个镜像层,每个镜像层又可以有多个子镜像层,以此类推,简单理解可以类比为文件夹,内部的文件相当于快捷方式,也就是指针。

因为这种结构,每次的修改只会产生新镜像,而不是更新原有镜像(其内部是不可变的)。

容器 (Container)

容器是用来对环境隔离的基础设施。与镜像不同的是,容器包含镜像,也依赖于镜像。其关系相当于类和类的实例。

Docker容器有三部分组成

  • 一个Docker镜像
  • 一个运行环境
  • 一个指令集

网络 (Network)

在容器的基础上,网络就是基于现已成熟的计算机网络体系,以容器为单位进行数据通信,实现容器与容器之间的数据通信。

Docker除了基本的网络通信,也拥有创建虚拟网络,进行网络隔离等功能。于此之外,利用Docker还可以实现独立的DNS环境,可以在不修改代码和配置的情况下迁移容器。在不同的计算机上也可以通过Docker连接到虚拟网络中,达到硬件屏蔽。

数据卷 (Volume)

数据卷针对的是文件和目录。在虚拟机中,文件系统如果出了问题,我们可以通过格式化的方式重置文件系统使其恢复,虽然心智负担很小,不过这样弊端很明显:不安全。

Docker为我们考虑到了数据独立性。得益于Docker的Union File System,在使用层面,我们不必考虑底层各种File System、虚拟机的适配,我们可以很方便地进行文件系统的挂载操作。除了同宿主机的文件共享外,还能够在容器间共享以及创建独立目录持久存放。

Docker中通过共享宿主机文件夹/文件、容器共享,独立目录等这些方式进行数据共享和持久化的文件或者目录,称为数据卷。

Docker Engine

Docker Engine为工业级容器引擎( Industry-standard Container Engine),其核心部分为容器引擎,其中最重要的是Docker daemon和docker CLI。

上述的镜像、容器、网络、数据卷都在Docker daemon中实现,包括容器管理、应用编排,镜像分发等功能。Docker daemon通常以服务的形式运行,也就是我们常说的Docker服务。除此之外,我们可以通过Docker向外暴露的RESTful API操作Docker daemon中的容器和镜像等资源进行管理。而方式,我们一般通过CLI,也就是命令行这种适应性更强的方式。介于此,Docker内置了Docker CLI控制台程序,方便同Docker daemon进行交互。

 -----------------------------------------
|Docker deamon  <=== REST ===> Docker CLI |
 -----------------------------------------
			    Docker Engine