利用Traefik+Docker构建可弹性扩展的微服务或服务集群

简介:

简介

Traefik是一个与Nginx、HAProxy有些相似的HTTP反向代理服务器,兼有负载均衡的功能。Nginx和HAProxy都有一个相同的问题就是,后端服务(通常称之为upstream或backend)变化(是否能正常工作、上线、下线、扩展)时,不容易动态更新Nginx和HAProxy的配置文件和重载服务,尽管有一些类似于RegistratorConsul 和Consul-Template 这样的工具可以来做这样的事。

FastStoneEditor1

图1:微服务常见的一种请求分发图。

与Nginx、HAProxy不同的是,Traefik更适合需要服务发现和服务注册的应用场景。例如,Traefik与Docker相结合非常容易,只需要指定label即可(虽然可以使用docker run指定label,但更推荐使用docker-compose.yml指定)。演示的例子直接可以参考官方网站,也可以参考下面的例子,非常简单并通俗易懂。需要指出的是Traefik并不是只能与Docker相结合,DockerSwarmMesos/MarathonConsulEtcdZookeeperBoltDBAmazon ECS, Rest API, file...都可以。具体的可以参考官方网站和Google it。

image

图2:Traefik是如何管理请求的

一个简单的演示:

1.创建Traefik服务,可以使用Docker也可以使用命令行的方式。

注意:不熟悉docker-compose的可以先学习一下docker-compose的语法和应用,或者直接忽略它,再根据下文的相对目录结构、文件和命令创建。

docker-compose.yml 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version:  '2'    
services:     
   traefik:     
     image: traefik:latest     
     restart: unless - stopped     
     command:  - - web  - - docker  - - docker.domain = docker.localhost  - - logLevel = DEBUG     
     networks:     
       -  webgateway     
     ports:     
       -  "80:80"     
       -  "8080:8080"     
       -  "443:443"     
     volumes:     
       -  / var / run / docker.sock: / var / run / docker.sock     
       -  / dev / null: / traefik.toml
networks:    
   webgateway:     
     driver: bridge


image_thumb7

2.使用whoami应用作为一个简易的HTTP Web服务:

docker-compose.yml 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
version:  '2'    
services:     
   whoami:     
     image: emilevauge / whoami     
     networks:     
       -  web     
     labels:     
       -  "traefik.backend=whoami"     
       -  "traefik.frontend.rule=Host:whoami.docker.localhost"
networks:    
   web:     
     external:     
       name: traefikself_webgateway

image_thumb8

3.通过docker-compose logs traefik命令查看Traefik日志:

image_thumb9

4.使用docker-compose scale whoami=3 命令扩展3个whoami应用,观察访问情况,通过CURL结果可以发现默认是轮询的wrr。

image_thumb10

image_thumb12

5.Traefik有一个Dashboard Web UI,可以通过网页了解当前Traefik中的运行情况和节点的健康状态。

image_thumb1

image_thumb14

更多参考:

官方网站(英文):https://docs.traefik.io/

使用Docker和Traefik构建微服务(英文) http://blog.hypriot.com/post/microservices-bliss-with-docker-and-traefik/

tag:traefik,docker,微服务

--end-- 本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1896255,如需转载请自行联系原作者





相关文章
|
11月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
946 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
11月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
581 100
|
11月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
578 99
|
11月前
|
缓存 前端开发 Docker
Docker Layer Caching:加速你的容器构建
Docker Layer Caching:加速你的容器构建
|
11月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
936 6
|
11月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
405 8
|
Linux Docker Windows
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1556 0