Docker Swarm,主要包含以下概念:
Swarm
Node
Stack
Service
Task
Load balancing
Swarm本身就是“群”的意思,人群、蜂群。这里就是指计算机集群(cluster)在用Docker连接后的状态。docker swarm命令可以创建、加入、离开一个集群。
Node就是计算机节点,也可以认为是一个Docker节点。Node分为两类:Manager和Worker。一个Swarm至少要有一个Manager,部分管理命令只有在Manager上才能使用。两类Node都可以运行Service,但只有Manager上才能执行运行命令。比如,在Manager才能使用docker node命令可以查看、配置、删除Node。
Stack是一组Service,和docker-compose类似。默认情况下,一个Stack共用一个Network,相互可访问,与其它Stack网络隔绝。这个概念只是为了编排的方便。docker stack命令可以方便地操作一个Stack,而不用一个一个地操作Service。
Service是一类容器。对用户来说,Service就是与Swarm交互的最核心内容。Service有两种运行模式,一是replicated,指定一个Service运行容器的数量;二是global,在所有符合运行条件的Node上,都运行一个这类容器。docker service命令可以操作Swarm中的Service。
Task就是指运行一个容器的任务,是Swarm执行命令的最小单元。要成功运行一个Service,需要执行一个或多个Task(取决于一个Service的容器数量),确保每一个容器都顺利启动。通常用户操作的是Service,而非Task。
Load balancing即负载均衡,也包含反向代理。Swarm使用的是Ingress形式的负载均衡,即访问每个节点的某个Published端口,都可自动代理到真正的服务。大致原理如下图所示。