天天看点

Docker与Traefik助微服务腾飞

本文讲的是<b>Docker与Traefik助微服务腾飞</b>【编者的话】Govind Fichtner是一位从业15年的德国IT老兵。先后担任过开发工程师、系统管理员、咨询师、架构师、敏捷训练师、项目经理、部门经理甚至CTO。白天他是一位勤奋的DevOps,晚上则变身为狂热的ARM设备爱好者。他现在为Hypriot成员,该组织成员以“Docker海盗”自称,发布了多款ARM架构中的Docker应用。他们的身上完美的体现了Geek精神。

你发现了这个动态特性的重要性了吗?

Traefik真正与众不同的特点是,它能通过监听Docker事件来增加或移除容器后端服务。所以当一个Docker容器启动或停止时,Traefik都可以知道这个情况并能将将容器添加到它的活动后端服务列表中。

Docker与Traefik助微服务腾飞

所以让我向你展示一个小例子来说明开始使用Traefik是多么简单的事情...

你能看到下面的架构图中我们有一个简单的HTTP服务来响应请求。

我们有多个后端服务,因为要做高可用和负载均衡,它们运行在多个物理节点上。Traefik作为前端代理将请求均匀分发给可用的后端服务上。

Traefik同时作为一个后端服务运行在Docker Swarm集群中的容器内。在这个例子中每个后端服务将会响应所在的独立的容器ID,以此来区分到底是哪个服务做出的响应。

Docker与Traefik助微服务腾飞

在开始之前我们需要运行一套Docker Swarm集群。

因为Cluster Lab已经预装在树莓派操作系统HypriotOS的“Barbossa”发行版中,我将向你展示怎样使用它去设置Swarm集群。

为了能跟上我的操作,你至少需要三台树莓派主机。我将会使用具有五个节点的Pico-Cluster。

Docker与Traefik助微服务腾飞

第一步是将HypriotOS镜像烧录到SD中。

将Hypriot仓库克隆到你作为烧录机的操作系统中合适的目录里。

使用flash命令,我们可以为我们的主节点准备好SD卡。

为从节点重复此过程。

当从节点还在烧录时,你就可以启动主节点了。

SSH到主节点并切换到root用户:

为了能使Cluster Lab与Traefik进行工作,我们需要升级它到最新版本:

然后启动Hypriot Cluster Lab,并使用verbose参数来启用日志输出功能:

当主节点准备好后,是时候启动其他的从节点了,步骤也是先升级然后使用相同的方式启动Cluster Lab。现在你可以尝试做做看,当一切搞定后我们再继续。

好了,我们可以执行下面的命令检查我们是否已经有了五个健康的Swarm Cluster 节点:

瞧我们的集群中真的有了五个节点了。恭喜恭喜!

当你完成了以上的步骤,那么剩下的就是小菜一碟了!

我们的微服务示例由两部分组成。Traefik前端和WhoAmI后端应用。对于这两部分我已经为你准备好了Docker镜像,你可以从Docker Hub中拉取到本地。

因为这两个Dockerfile也是Go语言为基础的镜像的好示例,我将会在这里解释一下其中的内容。

“rpi-traefik”的Dockerfile:

它表示我们刚刚在Alpine linux镜像之中增加了Traefik的可执行文件。这个镜像非常精巧仅仅只有41MB。如果你静态编译Traefik可执行文件到一个空镜像中,它的体积将会更小。

你将会在下面的WhoAmI镜像的Dockerfile中看到这是怎么做的:

“rpi-whoami”的Dockerfile:

仅仅只有3MB的镜像,这真是非常的小。

好了,现在是时候将组件放入一个Docker Compose应用中了。

克隆下面的仓库到你的集群主节点中:

当克隆结束后切换到‘traefik’目录,并使用Docker Compose在我们的微型Docker Swarm集群中启动我们的应用:

这些命令将会使Docker Compose启动两个容器。一个主节点中Traefik容器,另一个是在四个从节点中启动一个WhoAmI容器。

让我们查看一下是否真是如此:

看起来不错。那么让我们发送一些HTTP请求到前端来测试一下我们的应用:

正如你所见,所有的响应全部来自于同一个后端容器,并且这正是我所期望的。

接下来我们将会在Docker Compose scale命令的帮助下增加后端容器的数量。

我们观察到Docker Compose通知Docker Swarm增加了更多的容器。

让我们再次检查一下是否现在已经有五个后端容器运行了:

非常好。很显然Traefik刚才识别出了我们已经启动了更多的容器并且使他们自动与前端相连。

我们能通过Traefik容器的日志观察到具体的执行过程:

通过日志我们能清楚的看到Traefik是怎么获取Docker事件并作出反应的。

这难道不很帅吗?

好了。这就是我们的快速设置Docker和Traefik的简单微服务例子。

剩下唯一要做的就是再次清理容器。

你们注意到了“-v”参数了吗?这应该对清除所有的容器,包括overlay网络都非常的重要。没有“-v”参数,我们在下次使用Docker Compose启动应用的时候会产生一个错误。

在你关闭树莓派之前停止所有的节点中的Cluster Lab也是一个必要的步骤。

所以在所有节点上执行一下<code>$ cluster-lab stop</code>命令。

在这么短小的一篇博客中使用了这么多有趣的技术是非常棒的一件事情。并且使它们运行起来一点都不难,是不是?

===========================================

译者介绍

高洪涛,当当网架构师,开源数据库分库分表中间件Sharding-JDBC作者。目前从事Docker相关研究工作。

原文发布时间为:2016-06-17

本文作者:高洪涛

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Docker与Traefik助微服务腾飞