
1.3.1 应用容器引擎——Docker
Docker最初是DotCloud公司创始人Solomon Hykes发起的一个公司内部项目。它是基于DotCloud公司多年云服务技术的一次革新,于2013年3月以Apache 2.0授权协议开源,主要项目代码在GitHub上进行维护。
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker将应用程序与基础架构分离,可以快速交付软件。使用Docker可以像管理应用程序一样管理基础设施。通过利用Docker快速交付、测试和部署代码的方法,可以缩短开发、测试和生产的周期。
(1)Docker平台
Docker提供了在容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许在给定的主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的所有内容,因此不需要依赖于当前安装在主机上的内容。可以轻松地在工作时共享容器,并确保与共享的每个人都获得以相同方式工作的相同容器。
Docker提供了管理容器生命周期的工具和平台。
1)使用容器开发应用程序及其支持组件。
2)容器成为分发和测试应用程序的单元。
准备好后,将应用程序作为容器或编排好的服务部署到生产环境中。无论生产环境是本地数据中心、云提供商还是这两者的混合体,其工作原理都是一样的。
(2)Docker的优势
1)快速、一致地交付应用程序。Docker通过提供应用程序和服务的本地容器在标准化环境中工作,从而缩短了开发生命周期。容器非常适合于持续集成和持续交付(CI/CD)工作流。
考虑下面的场景:
开发人员在本地编写代码,并使用Docker与同事共享这些代码。
使用Docker将应用程序部署到测试环境,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。
当测试完成后,向客户提供修复就像将更新后的镜像部署到生产环境一样简单。
2)响应性部署和扩展。Docker支持高度可移植的工作负载。Docker可以运行在开发人员的本地笔记本计算机、数据中心的物理机或虚拟机、云提供商等多种环境中。
Docker的可移植性和轻量级特性也使得它能够很容易地实时动态管理工作负载,根据业务需要扩展或拆分应用程序和服务。
3)在同一硬件上运行更多的工作负载。Docker的体积小、速度快。它为基于虚拟机管理程序的平台提供了一个可行的、具有成本效益的替代方案,可以使用更多的计算能力来实现业务目标。Docker非常适用于高密度环境和中小型部署业务,在这些环境中,需要使用更少的资源来完成更多的任务。
(3)Docker的架构
Docker使用客户端-服务器架构。Docker客户端(Client)与Docker守护进程(Docker daemon)进行对话,后者负责构建、运行和分发Docker容器(Container)的繁重工作。Docker客户端和守护进程可以在同一个系统上运行,或者可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API、UNIX套接字或网络接口进行通信。Docker架构如图1-3所示。
1)Docker守护进程。Docker守护进程监听Docker API请求并管理Docker对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理Docker服务。
2)Docker客户端。Docker客户端是Docker用户与Docker交互的主要方式。当用户使用docker命令时,客户端会将这些命令发送给守护进程,守护进程会执行这些命令。docker命令可以通过调用Docker API与多个守护进程通信。Docker客户端也可以与多个守护进程通信。

图1-3 Docker的架构
3)Docker仓库。Docker仓库存储Docker镜像。Docker Hub是一个任何人都可以使用的公共仓库,并且Docker的默认配置为在Docker Hub中查找镜像。可以搭建和运行自己的私有仓库。
当使用docker pull(拉取镜像)或docker run(运行镜像)命令时,将从配置的仓库中提取所需的镜像。当使用docker push(推送镜像)命令时,镜像会被推送到配置的仓库中。