Docker Swarm概念与基本用法

栏目: 编程工具 · 发布时间: 6年前

内容简介: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端口,都可自动代理到真正的服务。 大致原理如下图所示。

Docker Swarm概念与基本用法

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概念与基本用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

我是一只IT小小鸟

我是一只IT小小鸟

胡江堂、李成、唐雅薇、秦琴、蒋宇东、刘未鹏、居振梁、刘帅、温卫斌、张弦、张凯峰、庄表伟、宋劲杉、程露、黄小明、易晓东、简朝阳、林健、高昂、徐宥、辜新星 / 电子工业出版社 / 2009 / 29.80

一群IT小小鸟—— 来自十几所院校,或男生,或女生;或科班,或半路转行。 分布在不同的公司,或外企,或国企,或民企,老板有土有洋。 有失意,有快意;有泪水,有欢笑。在失望中追求希望,在迷茫中辨别方向。 他们用自己的成长故事,告诉在校的师弟师妹们: 青春太宝贵,千万别浪费;要想不浪费,万事早准备。一起来看看 《我是一只IT小小鸟》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具