Docker三剑客之Swarm集群搭建
1. Docker Swarm 简介
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
注意:Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm,绝大多数用户已经开始使用 Swarm mode,Docker 引擎 API 已经删除 Docker Swarm。为避免大家混淆旧的 Docker Swarm 与新的 Swarm mode,旧的 Docker Swarm 内容已经删除,请查看 Swarm mode 一节。
2. Docker Swarm mode
Docker 1.12 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。请注意与旧的 Docker Swarm 区分开来。
Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。
3. Swarm mode 基本概念
Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。
使用 Swarm 集群之前需要了解以下几个概念。
3.1 节点
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
节点分为管理节点 (manager) 和工作节点 (worker) 。
管理节点:用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。
工作节点:是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。
来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。
3.2.服务和任务
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
服务有两种模式:
replicated services 按照一定规则在各个工作节点上运行指定个数的任务。global services 每个工作节点上运行一个任务两种模式通过 docker service create 的 --mode 参数指定。
来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。
4.创建 Swarm 集群
阅读 基本概念 一节我们知道 Swarm 集群由 管理节点 和 工作节点 组成。本节我们来创建一个包含一个管理节点和两个工作节点的最小 Swarm 集群。
4.1 准备工作
准备三台虚拟机,并安装Docker:
192.168.199.241 localhost
192.168.199.243 H243
192.168.199.245 H245
4.2.初始化集群
在 Docker Machine 一节中我们了解到 Docker Machine 可以在数秒内创建一个虚拟的 Docker 主机,下面我们使用它来创建三个 Docker 主机,并加入到集群中。
使用docker swarm init在本机初始化一个Swarm集群。
docker swarm init --advertise-addr 192.168.199.241
如果你的Docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP。
执行docker swarm init 命令的节点自动成为管理节点。
执行结果如下,则表明初始化成功:
Swarm initialized: current node (uw3q9lmtglwy3plvcjqv3gunm) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1zcf4bhlhdarrkw1566xbbt8vrdd91llaj1zhu2nekz56491z2-db9ampabiyc9ynb5fmobr6bob 192.168.199.241:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
4.3 增加工作节点
在另外两台服务器上执行上一步创建管理节点时候的输出的加入swarm集群的命令。
docker swarm join --token SWMTKN-1-1zcf4bhlhdarrkw1566xbbt8vrdd91llaj1zhu2nekz56491z2-db9ampabiyc9ynb5fmobr6bob 192.168.199.241:2377
结果:
This node joined a swarm as a worker.
如果加入失败,请检查管理节点的机器的防火墙是否管理,或者打开对应端口。
如果没有保存上面加入集群的命令,后面又有一台机器想加入集群,可通过一下命令获取加入集群的命令:
## 再次获取加入集群的命令
docker swarm join-token manager
4.4 查看集群
在管理节点使用docker node ls查看集群
docker node ls
这时候一个最小的集群就搭建好了。
4.5 将工作节点升级为管理节点
可以将工作节点升级为管理节点,保证管理节点的高可用。在管理节点上运行下面的命令:
## 命令格式
docker node promote 节点 [节点 ...]
## 示例
docker node promote H243 H245
5. 部署服务
我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。
5.1 新建服务
在创建好的Swarm集群中运行一个名为nginx的服务。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
现在我们使用浏览器,输入任意节点IP,即可看到nginx的默认页面。
如果想修改服务副本数量,可执行命令:
## 该命令的前提是nginx服务已存在
docker service scale nginx=2
5.2 查看服务
使用 docker service ls 来查看当前 Swarm 集群运行的服务。
docker service ls
使用 docker service ps 来查看某个服务的详情。
docker service ps nginx
使用 docker service logs 来查看某个服务的日志。
docker service logs nginx
5.3 删除服务
使用 docker service rm 来从 Swarm 集群移除某个服务。
docker service rm nginx
6. 图形化管理工具Portainer
利用Docker Swarm可以快速搭建一个最小集群,也可以在集群上部署服务,但是swarm中并没有提供统一入口查看节点的资源使用情况。
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器,动态扩容等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型企业对于容器管理的全部需求。
6.1 下载Portainer镜像并运行容器
## 查找Portainer镜像
docker search portainer
## 拉取镜像
docker pull portainer/portainer
## 运行容器
docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer
6.2 访问Portainer
在浏览器中输入http://192.168.199.241:9000/即可
本文分享自微信公众号 - Java开发乐园(it-oak)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Web端即时通讯实践干货:如何让WebSocket断网重连更快速?
本文作者网易智慧企业web前端开发工程师马莹莹。为了提升内容质量,收录时有修订和改动。 1、引言 在一个完善的即时通讯IM应用中,WebSocket是极其关键的一环,它为基于Web的即时通讯应用提供了一种全双工的通信机制。但为了提升IM等实际应用场景下的消息即时性和可靠性,我们需要克服WebSocket及其底层依赖的TCP连接对于复杂网络情况下的不稳定性,即时通讯的开发者们通常都需要为其设计一套完整的连接保活、验活以及断片网重连方案。 就断网重连而言,其重连响应速度将严重影响了上层应用的“即时性”和用户体验。试想打开网络一分钟后,微信的网络不能即时感知到socket连接的恢复,无法即时收发聊天消息的话,是不是很崩溃? 因此,如何在复杂网络场景下,更即时快速地感知网络变动,并快速恢复WebSocket的可用性,就变得尤为重要。本文将基于笔者的开发实践,分享WebSocket在不同状态下、不同的网络状态下,应该如何实现快速断网重连。 * 阅读对象:本文适合有过IM底层网络实际开发经验,或者对底层网络实现有较深了解的开发者阅读。如果对底层网络了解甚少,建议跳过本文,直接阅读网络本文末尾附录部...
- 下一篇
不用 PS 抠图,Python + OpenCV 实现自动海报场景替换!
现存在一个问题,就下面图片中的两本书而言,怎样快速让中间边的书本与左边书本对齐(最终效果能实现两张图片重叠(最终结果为右图)),进行的图像转变可旋转、平移、缩放、形变。 本文主要内容就是介绍利用 Opencv 来怎样解决上面的问题,解决这个问题需要三步 确定至少四组对应点坐标 找到一个转换矩阵; 把找到的转换矩阵应用到 Moving Image(需要移动的图片)上,实现图像对齐 图片旋转、平移、缩放等操作的主要目的,就是要最终实现两图像中点对点一一映射关系,图像映射本质上就是像素点转换 图中标记了其中四组对应点,分别标为不同的颜色,分别标为红、橙、黄和绿四种颜色;比如这里的 和 是就是一组对应点,图片经过转换之后 点 必须映射到 点位置。 涉及图片中点坐标变换,都需要借助于 矩阵 运算,这里探究的图像维度都属于二维,坐标只需要 即可 面向此类转换问题,Homography 转换 ( 3 × 3 矩阵) 可用于解决此类转化问题,用来解决点对点映射问题,Homography 矩阵可写作下列方式:则 、 作为对应点,则 Homography 的的应用 如下:而矩阵 H 参数的确定至少需要 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)