Wetts's blog

Stay Hungry, Stay Foolish.

0%

Docker-介绍

docker结构

Docker有三个组件和三个基本元素,读者可以快速浏览下面这个视频来了解这些组建和元素,以及它们的关系。三个组件分别是:

  • Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
  • Docker Daemon运行于主机上,处理服务请求。
  • Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。

三个基本要素分别是:

  • Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
  • Docker Images是一个只读模板,用来运行Docker容器。
  • DockerFile是文件指令集,用来说明如何自动创建Docker镜像。

在讨论Docker组件和基本要素如何交互之前,让我们来谈谈Docker的支柱。Docker使用以下操作系统的功能来提高容器技术效率:

  • Namespaces 充当隔离的第一级。确保一个容器中运行一个进程而且不能看到或影响容器外的其它进程。
  • Control Groups是LXC的重要组成部分,具有资源核算与限制的关键功能。
  • UnionFS(文件系统)作为容器的构建块。为了支持Docker的轻量级以及速度快的特性,它创建了用户层。

如何把它们放在一起

运行任何应用程序,都需要有两个基本步骤:

  1. 构建一个镜像。
  2. 运行容器。

这些步骤都是从Docker Client的命令开始的。Docker Client使用的是Docker二进制文件。在基础层面上,Docker Client会告诉Docker Daemon需要创建的镜像以及需要在容器内运行的命令。当Daemon接收到创建镜像的信号后,会进行如下操作:

第1步:构建镜像

如前所述,Docker Image是一个构建容器的只读模板,它包含了容器启动所需的所有信息,包括运行程序和配置数据。
每个镜像都源于一个基本的镜像,然后根据Dockerfile中的指令创建模板。对于每个指令,在镜像上创建一个新的层面。

一旦镜像创建完成,就可以将它们推送到中央registry:Docker Index,以供他人使用。然而,Docker Index为镜像提供了两个级别的访问权限:公有访问和私有访问。你可以将镜像存储在私有仓库,Docker官网有私有仓库的套餐可以供你选择。总之,公有仓库是可搜索和可重复使用的,而私有仓库只能给那些拥有访问权限的成员使用。Docker Client可用于Docker Index内的镜像搜索。

第2步:运行容器

运行容器源于我们在第一步中创建的镜像。当容器被启动后,一个读写层会被添加到镜像的顶层。当分配到合适的网络和IP地址后,需要的应用程序就可以在容器中运行了。


我们可以发现我们常说的“ubuntu”镜像其实不是一个镜像名称,而是代表了一个名为ubuntu的Repository,同时在这个Repository下面有一系列打了tag的Image,Image的标记是一个GUID,为了方便也可以通过Repository:tag来引用。

那么Registry又是什么呢?Registry存储镜像数据,并且提供拉取和上传镜像的功能。Registry中镜像是通过Repository来组织的,而每个Repository又包含了若干个Image。

  • Registry包含一个或多个Repository
  • Repository包含一个或多个Image
  • Image用GUID表示,有一个或多个Tag与之关联