内容简介:Docker Swarm是Docker公司开发的容器集群管理服务。 从与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。 但是它与Docker Swarm,主要包含以下概念:
Docker Swarm是 Docker 公司开发的容器集群管理服务。 从 1.12.0 版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为 Swarm Mode ,无需额外安装。
与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。 但是它与 docker-compose 兼容的优点,可以弥补一切。 对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择。
概念
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端口,都可自动代理到真正的服务。 大致原理如下图所示。
Replicated Mode
services:
some-serivce:
...
deploy:
mode: replicated
replicas: 3
默认情况下, mode 就是 replicated ,所以这行可以省略。 默认 replicas 数目为1,代表这个Service只启动1个容器。 这个模式,可以按需启动多个服务,Swarm会自动调节,有时一个Node会启动多个容器。
Global Mode
services:
some-serivce:
...
deploy:
mode: global
placement:
...
所有可部署的Node,都部署一个。 通过 placement ,可以限定满足条件的Node,而避免在不合适的Node进行部署。
操作
这里列出一些常用的具体操作。
创建第一个Node
docker swarm init --advertise-addr $IP
$IP 是当前Node的外部可访问IP,便于其它Node寻址。
这样,一个Swarm就被初始化完成了,它仅有一个Manager节点。
添加新的Node到Swarm
在Manager节点,执行以下命令可查看到如何加入一个Node:
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-ezs4fylj526e801b3cl0pojr5 10.174.28.52:2377
$ docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-164iqklrfv8o3t55g088hylyk 10.174.28.52:2377
在一个未加入任何Swarm的机器上,执行以上显示的命令 docker swarm join --token ... , 即可成为这个Swarm的Manage或Worker节点。
设置节点Label
在Manager节点,可以对任意节点设置标签:
docker node update $node_name --label-add main=true
$node_name 就是要设置节点的ID或HOSTNAME。 Label是键值对形式, main=true 中的 main 就是键、 true 就是值。
设置了Label以后,在Compose文件中就可以用 placement 中的 constraints 来对可用节点作出限制。
services:
some-serivce:
...
deploy:
placement:
constraints:
- node.labels.main == true
...
以上配置,让 some-service 仅在Label被设置为 main=true 的节点,才能使用。
启动、停止服务
docker stack deploy $stack_name -c docker-compose.yaml -c other.yaml ...
$stack_name 是Stack名称。 可以用 -c 指定多个docker-compose文件,也可在相同Stack下分批次 deploy 多个文件。 这些YAML文件的写法,和原先用 docker-compose 命令执行的没有本质区别,只是多加了以下独特配置,并且会忽略一些Swarm场景下不支持的配置。
推荐使用docker-compose文件来编排Stack,而非直接用 docker service create 来手工创建。 详细配置项,可参考《 Compose file version 3 reference | Docker Documentation 》。
需要停止Stack的所有服务时,可以执行以下命令。
docker stack rm $stack_name
更新已运行服务的镜像
docker service update --image $image:$tag $service_name
参考
以上所述就是小编给大家介绍的《Docker Swarm概念与基本用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ajax Design Patterns
Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99
Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!