第1章 入门
建立Docker生产环境系统的首要任务,是以一个有助于想象各组件如何相互配合的方式来理解其术语。与其他快速发展的技术生态系统一样,我们可以预见,Docker野心勃勃的市场营销、不完善的文档以及过时的博客文章将造成使用者对各个工具职责理解上的混乱。
我们将在本章中定义贯穿全书的术语和概念,而非提供一份统一的Docker百科全书。通常情况下,我们的定义与生态系统中的大体一致,但如果你所阅读的博客文章中使用了不同的术语也不用太过惊讶。
在本章中,我们将介绍在生产环境中运行Docker的核心概念以及不涉及具体技术的容器常识。在随后的章节中,我们将讨论真实世界的生产环境用例,并详细说明其组件和供应商信息。
1.1 术语
下面让我们来看一下本书所采用的Docker术语。
1.1.1 镜像与容器
镜像是指文件系统快照或tar包。
容器是指镜像的运行态。
1.1.2 容器与虚拟机
虚拟机持有整个操作系统和应用程序的快照。
虚拟机运行着自己的内核。
虚拟机可以运行Linux之外的其他操作系统。
容器只持有应用程序,不过应用程序的概念可以延伸到整个Linux发行版。
容器共享宿主机的内核。
容器只能运行Linux,不过在同一宿主机上运行的每个容器都可包含不同的发行版。
1.1.3 持续集成/持续交付
在应用程序新代码提交或触发其他条件时,系统自动构建新镜像并进行部署。
1.1.4 宿主机管理
设置/配备一台物理服务器或虚拟机以便用于运行Docker容器的过程。
1.1.5 编排
编排(orchestration,也称编配)这个术语在Docker生态系统中有多种含义。通常情况下,它包括调度和集群管理,不过有时也包括了宿主机管理。
在本书中,我们将编排作为一个松散的总称,包括容器调度的过程、集群的管理、容器的链接(发现),以及网络流量路由。或者换句话说,编排是个控制器进程,用于决定在哪里运行容器,以及如何让集群知道可用的服务。
1.1.6 调度
调度用于决定哪些容器可以以给定的资源约束(如CPU、内存和IO)运行在哪些宿主机上。
1.1.7 发现
容器如何公开服务给集群,以及发现如何查找其他服务并与之通信的过程。举个简单的用例:一个网站应用容器发现如何连接到数据库服务。
Docker文档中的发现是指将容器链接在一起,不过在生产级系统中,通常使用的是更复杂的发现机制。
1.1.8 配置管理
配置管理过去常常指的是Docker出现之前的自动化工具,如Chef和Puppet。大多数的DevOps团队正在转移到Docker上,以消除这类配置管理系统的复杂度。
在本书的示例中,配置管理工具只用于配备具有Docker和少量其他东西的宿主机。