要在Docker Engine处于群集模式时部署应用程序映像,请创建服务。在某些较大的应用程序上下文中,服务通常是微服务的映像。服务示例可能包括HTTP服务器,数据库或您希望在分布式环境中运行的任何其他类型的可执行程序。
创建服务时,您可以指定要使用的容器映像以及要在运行中的容器中执行的命令。您还定义服务的选项,包括:
- 群在群体外提供服务的端口
- 用于服务连接到群中其他服务的覆盖网络
- CPU和内存限制与保留
- 滚动更新策略
- 群中要运行的图像的副本数
服务,任务和容器
当您将服务部署到群集时,群集管理器接受您的服务定义作为服务的所需状态。然后,它将服务安排在群集中的节点上,作为一项或多项副本任务。任务在群集中的节点上彼此独立运行。
例如,假设您要在HTTP侦听器的三个实例之间实现负载平衡。下图显示了具有三个副本的HTTP侦听器服务。侦听器的三个实例中的每个实例都是集群中的任务。
容器是一个孤立的过程。在群体模式模型中,每个任务仅调用一个容器。任务类似于调度程序在其中放置容器的“插槽”。一旦容器处于活动状态,调度程序就会识别出该任务处于运行状态。如果容器未通过运行状况检查或终止,则任务终止。
任务和计划
任务是群内调度的基本单位。当您通过创建或更新服务来声明所需的服务状态时,协调器通过调度任务来实现所需的状态。例如,您定义了一个服务,该服务指示协调器始终保持HTTP侦听器的三个实例运行。协调器通过创建三个任务来做出响应。每个任务都是调度程序通过生成容器填充的插槽。容器是任务的实例。如果HTTP侦听器任务随后无法通过其运行状况检查或崩溃,那么协调器将创建一个新的副本任务,该任务将生成一个新的容器。
任务是一种单向机制。它通过一系列状态单调进行:已分配,已准备,正在运行等。如果任务失败,协调器将删除任务及其容器,然后根据服务指定的所需状态创建一个新任务来替换它。
Docker群模式的基本逻辑是通用调度程序和协调器。服务和任务抽象本身并不知道它们实现的容器。假设地,您可以实现其他类型的任务,例如虚拟机任务或非容器化过程任务。调度程序和协调程序与任务类型无关。但是,当前版本的Docker仅支持容器任务。
下图显示了群集模式如何接受服务创建请求以及如何将任务调度到工作者节点。