准备三台主机
A:192.168.1.5
B:192.168.1.7
C:192.168.1.10
 
Docker Swarm集群中的节点主机开放以下三个端口
2377端口, 用于集群管理通信
7946端口, 用于集群节点之间的通信
4789端口, 用于overlay网络流量
 
 
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
 
在A上执行
 
创建集群并加入集群
$ docker swarm init --advertise-addr 192.168.1.5:2377 --listen-addr 192.168.1.5:2377
 
initialized: current node (sf4zgbesw21ko536rrgpxspv4) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377
 
查看集群中的节点
$ docker node ls
 
查看 manager 角色的 token
$ docker swarm join-token manager
 
To add a manager to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-0ib338l48ybx8csrlpr3yn7ug 192.168.1.5:2377
 
 
查看 worker  角色的 token
$ docker swarm join-token worker
 
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377
 
 
在B上执行
 
把 B 以 manager 角色加入集群 (上面的 token 那段命令,再接上当前的监听的IP  )
$ docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-0ib338l48ybx8csrlpr3yn7ug 192.168.1.5:2377  --advertise-addr 192.168.1.7:2377 --listen-addr 192.168.1.7:2377
 
查看一下节点
$ docker node ls
 
 
在C上执行
 
把 C 以 worker 角色加入集群(上面的 token 那段命令,再接上当前的监听的IP  )
$ docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377 --advertise-addr 192.168.1.10:2377 --listen-addr 192.168.1.10:2377
 
在 worker 节点查看集群中的节点会报没有权限的错误
$ docker node ls
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state.
 
 
集群建好了,就开始创建服务,可以在任意 manager 角色的主机上创建
这个创建容器几乎一样,--replicas 5 在集群中运行五个实例副本 -p 80:8080 服务绑定 80 端口
$ docker service create --name web-fa  -p 80:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
k4qpts36rterzzsy0ys0f7rjw
overall progress: 5 out of 5 tasks
1/5: running   [==================================================>]
2/5: running   [==================================================>]
3/5: running   [==================================================>]
4/5: running   [==================================================>]
5/5: running   [==================================================>]
 
打开浏览器,输入 A B C 任意主机的 IP 访问一下,看看能否打开一个web页面
 
查看服务列表
$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                                       PORTS
k4qpts36rter        web-fa              replicated          5/5                 nigelpoulton/pluralsight-docker-ci:latest   *:80->8080/tcp
 
查看具体服务中运行的任务
$ docker service ps web-fa
ID                  NAME                IMAGE                                       NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
94thjgudevf0        web-fa.1            nigelpoulton/pluralsight-docker-ci:latest   host                Running             Running 7 minutes ago                       
o0ll8yuo5w0x        web-fa.2            nigelpoulton/pluralsight-docker-ci:latest   host                Running             Running 7 minutes ago                       
nkonamy3qa97        web-fa.3            nigelpoulton/pluralsight-docker-ci:latest   host                Running             Running 7 minutes ago                       
k311fuxvvz0c        web-fa.4            nigelpoulton/pluralsight-docker-ci:latest   aaa                 Running             Running 7 minutes ago                       
sttj7tt70k99        web-fa.5            nigelpoulton/pluralsight-docker-ci:latest   host                Running             Running 7 minutes ago  
 
查看服务的详细信息
docker service inspect --pretty web-fa
 
 
 
还有一些实用命令
退出集群: docker swarm leave -f 
删除服务: docker service rm <service-name>
 
总结一下,当任务副本数大于集群中的节点数时,势必有节点得运行两个容器实例。通过 docker ps 可以看到多个容器实例并没有绑定到宿主机的端口,如果绑定同一个端口,势必会冲突。
建议,如果想学得深入点,还是得买书呀,网上都是教程都近似于笔记,很多细节没有讲。《深入浅出 Docker》还可以,书也不厚,最烦那种外文翻译出来厚厚地书了,有些真是一半都是废话,浪费生命啊。。。
 
查看节点为例:
[zbseoag@host ~]$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ioi5usennpdgjpb6ehxmkifgm host Down Active 19.03.
ozeybjcrl9z913qtx2xqkexiq host Ready Active Reachable 19.03.
sf4zgbesw21ko536rrgpxspv4 * host Ready Active Leader 19.03.
x5yvbr44s6294qjf1bx9fhcro host Ready Active Reachable 19.03. 说明:
sf4zgbesw21ko536rrgpxspv4 * : 这个 * 表示当前执行命令的主机
HOSTNAME:由于我是虚拟机副本创建的,都是一样的名字。你可以在其中一台上用 sodu hostname aaa 来临时改变主机名,然后再运行一下 docker node ls 会看到列表中主机名变了
MANAGER STATUS:直译就叫管理员状态,这一栏为空就表示 worker 节点, Leader 领导者,Reachable 追随者

  

 
 

搭建 Docker Swarm 集群的更多相关文章

  1. 从零开始搭建Docker Swarm集群

    从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...

  2. Docker Swarm 集群环境搭建及弹性服务部署

    上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...

  3. 通过docker-machine和etcd部署docker swarm集群

    本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...

  4. docker--搭建docker swarm集群

    10 搭建docker swarm集群 10.1 swarm 介绍 Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行 为.比如我们常见的蜂群,鱼群,秋天 ...

  5. Docker Swarm 集群管理利器核心概念扫盲

    Swarm 简介 Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现.代码开源在:https://github.com/docker/swarm 使用它可以将 ...

  6. docker swarm集群搭建及使用Portainer、shipyard

    一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168. ...

  7. docker + swarm 集群

    docker + swarm 集群 导读 Swarm是Docker公司在2014年12月初新发布的容器管理工具.和Swarm一起发布的Docker管理工具还有Machine以及Compose.Swar ...

  8. 云计算之路-阿里云上:节点 CPU 波动引发 docker swarm 集群故障

    非常抱歉,今天 10:05-10:20 左右,我们用阿里云服务器搭建的 docker swarm 集群又出现故障,又是因为突然的节点 CPU 波动. 受这次故障影响的站点有 闪存,博问,班级,园子,短 ...

  9. docker swarm 集群及可视化界面的安装及配置

    docker swarm 集群及可视化界面的安装及配置 2016-12-14 16:08:46 标签:swarm consul registrator 原创作品,允许转载,转载时请务必以超链接形式标明 ...

随机推荐

  1. 深入挖崛:mysql主从复制原理

    一.基本原理 MySQL复制过程分成三步: 1).master将改变记录到二进制日志(binary log).这些记录过程叫做二进制日志事件,binary log events: 2).slave将m ...

  2. ArrayList与LinkedList

    ArrayList与Linkedlist的增删改查问题以及集合选择问题 线程:安全:Vector 不安全:ArrayList,LinkedList 增删多:LinkedList 查询多:ArrayLi ...

  3. WIN10 报错 "此共享需要过时的SMB1协议,而此协议是不安全"的解决方法

    发现新安装的win10能看到其他计算机,但不能共享其他计算的共享文件/夹,出现如下情况:在浏览器里输入:\IP 不能访问到计算机的共享文件夹,或者在桌面上新建一个指向到其他计算机共享文件/夹的快捷方式 ...

  4. this(this的4种指向和改变this指向的方式)

    this是Javascript语言的一个关键字. 随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 1.this指向的形式4种 a.如果是 ...

  5. uni-app常用 HTML5+APP 设置

    1.锁定屏幕方向 锁定屏幕方向后屏幕只能按锁定的屏幕方向显示,关闭当前页面后仍然有效. 可再次调用此方法修改屏幕锁定方向或调用 unlockOrientation() 方法恢复到应用的默认值. 锁定屏 ...

  6. iOS 原生推送(APNS)的实现

    1.前期准备工作 创建你的APNs keys 或者 创建推送证书,这两个创建一个即可实现推送.这两个创建一个即可实现推送.这两个创建一个即可实现推送.重要的事情说三遍,我看评论区有小伙伴误解. 1.  ...

  7. B端产品经理的金字塔能力模型

    工作这几年,时长思考,作为B端产品经理自己应该具备什么样的能力? 虽然工作依旧在有条不紊的进行,但是时常会陷入到对知识或者能力的焦虑当中.特别时是工作三五年,产品经理进阶门槛时. 虽然产品经理的能力是 ...

  8. seq2seq模型详解及对比(CNN,RNN,Transformer)

    一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...

  9. 11-赵志勇机器学习-DBSCAN聚类

    (草稿) 两点关系的三种定义: 1. 直接密度可达:A在B的邻域内: 2. 密度可达:AB之间存在,直接密度可达的点串: 3. 密度连接:AB之间存在点k,使得Ak和Bk都密度可达: 过程: 1. 对 ...

  10. USACO Mooo Moo

    洛谷 P2214 [USACO14MAR]哞哞哞Mooo Moo 洛谷传送门 JDOJ 2416: USACO 2014 Mar Silver 3.Mooo Moo JDOJ传送门 Descripti ...