当你在swarm mode 下,使用docker engine 部署一个应用镜像。你就是创建了一个服务。


在一些大型的应用程序中,频繁更新的服务会做成一个服务镜像来使用。


例如:

在一个分布式的环境中运行一个HTTP服务,数据库服务,还有其它可执行的程序。


当你创建一个服务,你需要定义使用哪个镜像和在容器中执行哪些命令。

你也可以定义下面的选项:(可选)

  1. 在swarm外部的可用端口

  2. 一个overlay 网络,用于连接swarm中其它的服务

  3. CPU和内存限制、预留

  4. 滚动更新策略

  5. 在swarm中运行的容器副本数量


服务,任务和容器


当你在swarm中部署一个服务,swarm manager 会接收你所定义的服务的状态。

然后它会安排在一个或者多个容器副本节点部署你所定义的服务。

在swarm中运行的每个任务都是单独存在的。


例如:

假设你要在三个HTTP 服务中进行负载均衡。如下图所示:

在swarm中的每个实例就是一个任务。

How swarm mode works_How services work_swarm


一个容器就是一个隔离的进程。在swarm mode 模型中,每个任务使用一个容器。

当scheduler分配一个容器,一个任务就和一个slot插槽相似。一旦这个容器激活了,scheduler会识别这个任务处于runing的状态,如果这个容器启动失败,或者被停止,这个任务也随之停止。



任务和计划

在swarm集群中,一个任务就是一个原子计划。当你通过创建或者更新一个服务,来声明一个你定义的服务,编排器会自动识别计划任务的状态。

例如:

如果你要定义一个服务让编排器保持三个HTTP实例一直运行。编排器就会响应去创建三个任务。每个任务分配一个位置(即一个容器)。容器就是任务的实例化。如果HTTP监听任务健康检查失败或者崩溃了,编排器会创建一个新的任务来实例化一个新的容器。