文档章节

Docker1.12 + Swarm 构建动态微服务应用

linuxprobe
 linuxprobe
发布于 2016/07/26 20:26
字数 1846
阅读 16
收藏 0

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

新的Docker Swarm不再需要为应用容器设置独立的HTTP代理。如上图所示的原有架构现在被精简为下图所示的形式:

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

移动部件更少了——赞!

另外,我们还为后端服务内置了负载均衡机制。我们甚至能够立足于集群内的任一节点访问这些服务。Docker Swarm还集成有一种内置网状路由机制,用于将各请求路由至适合的后端容器当中。

面对这些新功能,有些朋友可能认为Docker Swarm集群的设置过程会比原本更为复杂。事实上,整个流程反而更加简单。

仍然半信半疑?下面一起来看。

没错,这次我们仍然使用Raspberry Pi集群。我使用的是Docker 1.12内部版本,并将其安装在Raspberry Pi上。当Docker 1.12推出正式版后,我们会对内容做出针对性更新。

下面看看当前配置:

root@pi6 $ docker version Client: 
Version: 1.12.0-rc1 
API version: 1.24 
Go version: go1.6.2 
Git commit: 1f136c1-unsupported 
Built: Wed Jun 15 15:35:51 2016 
OS/Arch: linux/arm 
Server: 
Version: 1.12.0-rc1 
API version: 1.24 
Go version: go1.6.2 
Git commit: 1f136c1-unsupported 
Built: Wed Jun 15 15:35:51 2016 
OS/Arch: linux/arm

很好,Docker 1.12 RC1已经准备就绪。下面启动各项必要服务。 首先看看我们能否在Docker CLI中找到隐藏的各项新功能。

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

root@pi6 $ docker Usage: docker [OPTIONS] COMMAND [arg...] 
docker [ --help | -v | --version ] 
A self-sufficient runtime for containers. 
... service Manage Docker services ... stats Display a live stream of container(s) resource usage statistics ... swarm Manage Docker Swarm ... update Update configuration of one or more containers Run 'docker COMMAND --help' for more information on a command.

我直接去掉了其中与上代版本完全一致的部分,而只留了不同之处。 现在我们可以使用docker swarm命令了。

查询其具体作用:

root@pi6 $ docker swarm Usage: docker swarm COMMAND 
Manage Docker Swarm 
Options: 
--help Print usage Commands: 
init Initialize a Swarm. join Join a Swarm as a node and/or manager. update update the Swarm. leave Leave a Swarm. inspect Inspect the Swarm Run 'docker swarm COMMAND --help' for more information on a command.

就是说其用于“初始化一套Swarm”。看起来正是我们需要的。首先启动该命令。

root@pi6 $ docker swarm init Swarm initialized: current node (1njlvzi9rk2syv3xojw217o0g) is now a manager.

现在我们的Swarm管理节点已经开始运行,接下来为集群添加更多节点。

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

前往集群中的另一节点并执行:

root@pi1 $ docker swarm join pi6:2377 This node joined a Swarm as a worker.

使用上述命令,我们在刚刚创建的初始Swarm集群中声明了应当加入该Swarm管理节点的各个新节点。Docker Swarm会在后台执行相关操作。

举例来说,其会为不同集群节点设置经过加密的彼此通信通道。我们不再需要自行管理TLS证书。

每位曾经设置过Docker Swarm集群的朋友,都会意识到新的流程有多么简单。 不过到这儿还没有结束。

Swarm管理节点中的一条“docker info”带来了一些有趣的提示。我仍然删去其中不必要的部分:

root@pi6 $ docker info ... Swarm: active 
NodeID: 1njlvzi9rk2syv3xojw217o0g 
IsManager: Yes 
Managers: 1 
Nodes: 2 
CACertHash: sha256:de4e2bff3b63700aad01df97bbe0397f131aabed5fabb7732283f044472323fc 
... Kernel Version: 4.4.10-hypriotos-v7+ 
Operating System: Raspbian GNU/Linux 8 (jessie) 
OSType: linux 
Architecture: armv7l 
CPUs: 4 
Total Memory: 925.4 MiB 
Name: pi6 
...

如大家所见,我们现在已经在“docker info”输出结果中有了新的“Swarm”部分,其告诉我们当前节点属于一套Swarm管理节点,且该集群由两个集群节点构成。

在第二个节点上,其输出结果与管理节点稍有不同:

Swarm: active NodeID: 3fmwt4taurwxczr2icboojz8g 
IsManager: No

到这里,我们已经拥有了一套有趣但仍然空空如也的Swarm集群。

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

我们还需要了解Docker 1.12中的service这项全新抽象定义。大家可能在前面的输出结果中注意到了docker service命令。所谓docker service,是指运行在容器当中且负责为外部世界提供运行在Swarm集群内的“service”的软件片段。

这样的一项服务可以由单一或者多套容器构成。在后一种情况下,我们可以确保服务拥有高可用性及/或负载均衡能力。

下面使用之前创建的“whoami”镜像建立这样一项服务。

root@pi6 $ docker service create --name whoami -p 80:8000 hypriot/rpi-whoami buy0q65lw7nshm76kvy5imxk3

在“docker swarm ls”命令的帮助下,我们可以检查这项新服务的状态。

root@pi6 $ docker service ls ID NAME SCALE IMAGE COMMAND 
buy0q65lw7ns whoami 1 hypriot/rpi-whoami

下面检查我们是否能够通过curl命令向eth0网络接口发送l http命令,从而请求目录页面。

root@pi6 $ curl http://192.168.178.24 
I'm 1b6df814c654

一切顺利,鼓掌! 有些朋友可能注意到,“docker swarm ls”命令的标题行中存在“SCALE”部分,这似乎意味着我们可以对服务进行扩展。

root@pi6 $ docker service scale whoami=5 
whoami scaled to 5

那就来实际验证一下吧:

root@pi6 $ docker service ls ID NAME SCALE IMAGE COMMAND 
buy0q65lw7ns whoami 5 hypriot/rpi-whoami 
root@pi6 $ for i in {1..5}; do curl http://192.168.178.24; done

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

非常简单。

但这种方式与原有Swarm其实差不多,只不过在使用感受上更便捷也更快速。请注意,我们使用的是Raspberry Pi而非强大的服务器,所以要对性能拥有较为保守的估计。

下面从单一Docker引擎的角度来看看目前的运行状态:

root@pi6 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

如大家所见,已经启动的容器有5套,其中3套驻留于“pi6”中。 下面看看是否能够找到其它容器:

root@pi1 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
db411a119c0a hypriot/rpi-whoami:latest "/http" 6 minutes ago Up 6 minutes 8000/tcp whoami.2.2tf7yhmx9haol7e2b7xib2emj 
0a4bf32fa9c4 hypriot/rpi-whoami:latest "/http" 6 minutes ago Up 6 minutes 8000/tcp whoami.3.2r6mm091c2ybr0f9jz4qaxw9k

那么如果我们将这套Swarm集群驻留在“pi1”上,结果又会如何?

root@pi1 docker swarm leave Node left the default swarm.

下面看看另一节点上的运行情况:

docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker1.12 + Swarm 构建动态微服务应用Docker1.12 + Swarm 构建动态微服务应用

这里的情况相当于“pi1”节点发生故障,此时“pi1”中运行的全部容器都会被自动迁移至另一集群节点。这项机制在实际生产当中无疑非常重要。

那么下面我们回顾一下之前了解到的信息:

我们创建了一款小型动态微服务应用,完全由Docker构成。Docker Swarm现在被整合至Docker-Engine当中,而不再以独立软件形式存在。在多数情况下,这能够为应用后端服务建立起独立的代理机制。不再需要使用nginx、HAProxy或者Traefik。

尽管活动部件数量有所减少,但我们现在反而拥有了内置的高可用性与负载均衡功能。我非常期待未来Docker Swarm正式版本中会带来哪些新的惊喜,又如何与Docker Compose进行协作。

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/

本文转载自:http://www.linuxprobe.com/docker1-12-swarm.html

linuxprobe
粉丝 23
博文 257
码字总数 45072
作品 0
朝阳
私信 提问
Docker1.12 + Swarm 构建动态微服务应用

新的Docker Swarm不再需要为应用容器设置独立的HTTP代理。如上图所示的原有架构现在被精简为下图所示的形式: 移动部件更少了——赞! 另外,我们还为后端服务内置了负载均衡机制。我们甚至能...

linuxprobe
2016/07/27
36
0
Docker Swarm群集

Docker Swarm 是什么? Docker Swarm是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作 docker1.12集成了swa...

柴鑫旺
2017/09/03
0
0
WildFly Swarm 2017.4.0 发布,Java 应用服务器

WildFly是红帽公司新一代应用服务器。支持动态模块化、集中化管理、Java EE 7,而WildFly swarm是WildFly的微服务化支持,和spring boot类似。但是WildFly swarm完整的支持JAVA EE的准标。 ...

达尔文
2017/04/09
524
2
5. 应用服务器与微服务 - JavaEE基础系列

本文是JavaEE基础系列的第五节。 Java EE简介 - JavaEE基础系列 JSR简介 - JavaEE基础系列 什么是JSR参考实现? - JavaEE基础系列 什么是应用服务器? - JavaEE基础系列 Microservices(微服务...

renfufei
2017/09/07
0
0
微服务 WildFly Swarm 简介

我们将看到的最后一个Java微服务框架是一个相对较新的场景,它利用了 JBoss WildFly 应用服务器中已试过且受信任的 JavaEE 功能。WildFly Swarm 是 WildFly 应用服务器的一个完整的拆下来的组...

woshixin
2018/06/20
51
0

没有更多内容

加载失败,请刷新页面

加载更多

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.pas......

行者终成事
16分钟前
3
0
从 Storm 到 Flink,汽车之家基于 Flink 的实时 SQL 平台设计思路与实践

在 2019 年之前,之家的大部分实时业务都是运行在 Storm 之上的。Storm 作为早期主流的实时计算引擎,凭借简单的 Spout 和 Bolt 编程模型以及集群本身的稳定性,俘获了大批用户。下图是实时计...

阿里云官方博客
16分钟前
4
0
网络安全-Day04

2.1.1 什么是SQL注入 2.1.2 注入分类 2.1.3 MySQL手工注入 2.1.4 sqlmap使用 2.1.5 总结 什么是SQL注入 SQL注入漏洞原理 什么是SQL 结构化查询语言(Structured Query Language),是一种特殊目...

Jerry1101
17分钟前
3
0
docker容器内安装yum,vim等命令,以及配置ls指令

使用国内镜像 mv /etc/apt/sources.list /etc/apt/sources.list.bakecho "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.listecho "deb http://......

长恭
17分钟前
3
0
超详细的MySQL8.0.17版本安装教程

下载MySQL MySQL的官网地址:https://www.mysql.com/。 如下图所示: 然后点击DOWNLOADS ==> Community,选择MySQL Community Server。如图所示: 滑到页面的最下面,找到Recommended Downl...

彩色泡泡糖
20分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部