Docker Swarm概念与基本用法

目录

概念

操作


从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm模式,无需额外安装。

与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。但是它与搬运工-撰写兼容的优点,可以弥补一切。对于没有集群使用经验的小白,用多克尔群起步,是一个很好的选择。

概念

Docker Swarm,主要包含以下概念:

  • 一群

  • 节点

  • 叠放

  • 服务

  • 任务

  • 负载均衡

Swarm本身就是“群”的意思,人群,蜂群。这里就是指计算机利用(cluster)在用Docker连接后的状态。dockerswarm命令可以创建,加入,离开一个人。

Node分为计算机例程,也可以认为是一个Docker例程。Node分为两类:Manager和Worker。一个Swarm至少要有一个Manager,部分管理命令只有在Manager上才能使用。两类Node都可以运行Service,但只有,在Manager才能使用docker node命令可以查看,配置,删除Node。

在某些情况下,一个堆栈共享一个网络,相互可访问,与其他堆栈网络替代。这个概念只是为了编排的方便。dockerstack命令可以方便地操作一个堆栈,而不用一个一个地操作Service。

Service是一类容器。对用户来说,Service是与Swarm交互的最核心内容。Service有两种运行模式,一是复制,指定一个Service运行容器的数量;二是全局的,在所有符合运行条件的Node上,都运行一个类别容器。dockerservice命令可以操作Swarm中的Service。

要成功运行一个Service,需要执行一个或多个Task(称为一个Service的容器数量),确保每个一个容器都顺利启动。通常用户操作的是Service,而非Task。

负载均衡即负载均衡,也包含反向代理。群集使用的是Ingress形式的负载均衡,即访问每个实例的某个发布的端口,都可自动代理到真正的服务。大致原理如下图所示。

入口网络

复制模式

services:
  some-serivce:
    ...
    deploy:
      mode: replicated
      replicas: 3

默认情况下,mode就是复制的,所以这行可以省略。默认副本数为1,代表这个服务只启动1个容器。这个模式,可以按需启动多个服务,Swarm会自动调节,有时一个Node会启动多个容器。

全局模式

services:
  some-serivce:
    ...
    deploy:
      mode: global
      placement:
        ...

所有可部署的Node,都部署一个。通过放置,可以定义满足条件的Node,而避免在适当的Node进行部署。

操作

这里列出一些常用的具体操作。

创建第一个节点

docker swarm init --advertise-addr $IP

$IP是当前节点的外部可访问IP,可以其他节点替代。

这样,一个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例程。

设置标签

在Manager总经理,可以对任意子系统设置标签:

docker node update $node_name --label-add main=true

$node_name标签main=true就是键值对形式,中的主要就是键,true就是值。

设置了Label以后,在Compose文件中就可以使用placement中的约束来对可用例程进行限制。

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可以用-c指定多个docker-compose文件,也可以在相同的堆栈下分叉部署多个文件。这些YAML文件的写法,和原先用docker-compose命令执行的没有本质区别,只是多加了以下独特配置,并且会忽略一些Swarm场景下不支持的配置。

详细配置项,可参考《撰写文件版本3参考|推荐使用docker-compose文件来编排Stack,而不直接用docker service create来手工创建。Docker文档》。

需要停止Stack的所有服务时,可以执行以下命令。

docker stack rm $stack_name

更新已运行服务的充足

docker service update --image $image:$tag $service_name

来源:https://note.qidong.name/2018/11/docker-swarm/作者:隐藏蟒

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark_Ice_

你的支持是我创作的核动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值