

Docker Swarm概念与基本用法
source link: https://note.qidong.name/2018/11/docker-swarm/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Docker Swarm概念与基本用法
2018-11-10 10:06:06 +08 字数:1990 标签: Docker
Docker Swarm是Docker公司开发的容器集群管理服务。
从1.12.0
版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装。
与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。 但是它与docker-compose兼容的优点,可以弥补一切。 对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择。
概念 ¶
Docker Swarm,主要包含以下概念:
- Swarm
- Stack
- Service
- 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
参考 ¶
Recommend
-
50
Docker Swarm是什么?是一个用于创建 Docker 主机集群的工具,使用 Swarm 操作集群,会使用户感觉就像是在一台主机上进行操作,docker1.12 集成了 swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm 集群。实验环境:这里选择三台主机...
-
73
-
52
准备工作 我本机是macOS,所以我直接安装了docker desktop,其中包含了docker-machine,不用单独安装。
-
9
For HA and easier management of our containers we can create swarm cluster. It is composed of couple nodes with docker engine installed. How to setup swarm and use it? Example configuration and...
-
11
``` docker pull swarm ``` # **DEPRECATION NOTICE** > Classic Swarm has been archived and is no longer actively developed. You may want to use the Swarm mode built into the Docker Engine instead, or another orchestration system. (https://gi...
-
11
This post is based on material from Docker in Practice, available on Manning’s Early Access Program:
-
16
Posted Sep 42020-09-04T02:20:00-05:00 by remotephone Move over docker hubYou might have heard Docker changed their pricing plans and free tier storage allowances recently. It caused quite the fuss and...
-
15
No CI and No CD - Deploying Docker Swarm with Bash and Ansible Jun 20, 2017 This post may well verge on the heretical. I'm getting close on a new SAAS app that is going to be run using containers and Docker Swarm as my...
-
10
docker 1.13 创建swarm集群 作者: wencst 分类: docker,微服务 发布...
-
10
Traefik Reverse Proxy with Docker Compose and Docker Swarm February 17, 2021 Reading time ~8 minutes ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK