准备三台主机
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集群
从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...
- Docker Swarm 集群环境搭建及弹性服务部署
上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...
- 通过docker-machine和etcd部署docker swarm集群
本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...
- docker--搭建docker swarm集群
10 搭建docker swarm集群 10.1 swarm 介绍 Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行 为.比如我们常见的蜂群,鱼群,秋天 ...
- Docker Swarm 集群管理利器核心概念扫盲
Swarm 简介 Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现.代码开源在:https://github.com/docker/swarm 使用它可以将 ...
- docker swarm集群搭建及使用Portainer、shipyard
一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1 localhost 192.168. ...
- docker + swarm 集群
docker + swarm 集群 导读 Swarm是Docker公司在2014年12月初新发布的容器管理工具.和Swarm一起发布的Docker管理工具还有Machine以及Compose.Swar ...
- 云计算之路-阿里云上:节点 CPU 波动引发 docker swarm 集群故障
非常抱歉,今天 10:05-10:20 左右,我们用阿里云服务器搭建的 docker swarm 集群又出现故障,又是因为突然的节点 CPU 波动. 受这次故障影响的站点有 闪存,博问,班级,园子,短 ...
- docker swarm 集群及可视化界面的安装及配置
docker swarm 集群及可视化界面的安装及配置 2016-12-14 16:08:46 标签:swarm consul registrator 原创作品,允许转载,转载时请务必以超链接形式标明 ...
随机推荐
- nginx 反向代理时丢失端口的解决方案(转)
今天,配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题.但一旦设置为监听其他端口,就一直跳转不正常:如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的过程中端 ...
- SpringMVC-拦截器做一个登录认证的小Demo
拦截器 拦截器的定义 处理器拦截器类似于servlet开发中的filter,用于对处理器进行预处理和后处理. 定义拦截器,实现HandlerInterceptor这个接口 接口的实现需要导入包impo ...
- c++指针全攻略
1.指针概念理解 int* p 定义一个指针(推荐使用这种写法int* ,理解上有好处) p 指针变量: * 间接运算符(访问符),代表访问该地址所指向的空 ...
- Linux用户权限管理
Linux操作系统: 多用户多任务的操作系统 用户类型分为: 管理员用户 : root 普通用户分为:系统用户/程序用户 用户相关的文件: /etc/passwd 用 ...
- java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES)
java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES) at com.mysql.c ...
- Memcache未授权访问漏洞简单修复方法
漏洞描述: memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏 ...
- js数组详解,js数组操作
转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...
- CentOS7 安装 vsftpd 服务
CentOS7 安装 vsftpd 服务 0.FTP简介 FTP服务是一个跨平台的文件共享解决方案 0.1.FTP两种模式的区分:服务端的主被动模式 1)ftp一般分为两种模式,PORTFTP和PAS ...
- 【C#】身份证号正确性验证及正则表达式格式验证
身份证前两位各省对应的编号是: 1.华北地区:北京市|11,天津市|12,河北省|13,山西省|14,内蒙古自治区|15: 2.东北地区: 辽宁省|21,吉林省|22,黑龙江省|23: 3.华东地区: ...
- 解决.Net Core 3.0 不支持 Autofac 问题
Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading ...