内容简介:Docker 已经非常的流行,在生产环境中跑应用程序非常便捷和高效,当我们在一台机器上跑很多容器的时候,就要配置一个反向代理,因为通常我们只想把Traefik 是一个可以感知 Docker 容器并且内置监控面板的反向代理,本文中,你将会使用 Traefik 反向代理两个都和我们使用 Traefik 的
Docker 已经非常的流行,在生产环境中跑应用程序非常便捷和高效,当我们在一台机器上跑很多容器的时候,就要配置一个反向代理,因为通常我们只想把 80 和 443 端口暴露出去。
Traefik 是一个可以感知 Docker 容器并且内置监控面板的反向代理,本文中,你将会使用 Traefik 反向代理两个都和 MySQL 通讯的容器: Wordpress 和 Adminer ,并且使用 Let's Encrypt 配置 Traefik 的 HTTPS
准备工作
CentOS 7 Docker Docker Compose A 记录
第一步:配置并且启动 Traefik
我们使用 Traefik 的 官方镜像 来启动。
运行之前需要先创建一个配置文件并且配置密码来访问 Traefik 的监控面板。
我们使用 htpasswd 工具来生成密码, htpasswd 在 httpd-tools 包中,安装:
sudo yum install -y httpd-tools
之后使用 htpasswd 来生成密码, secure_password 是用来访问 Traefik 的管理员用户 admin 的密码
htpasswd -nb admin secure_password
输出:
admin:$apr1$kEG/8JKj$yEXj8vKO7HDvkUMI/SbOO.
我们会把这个用作 Traefik 的 HTTP Basic 。
之后开始配置 Traefik,先创建一个 traefik.toml 文件,使用 TOML 格式, TOML 是一个类似 INI 的配置语言,我们用这个文件来配置 Traefik 以及我们将使用的各种与之集成的应用程序,本文中,我们会用到三个 Traefik 可用的 Provider: api docker 和 acme
使用 vi 或者其他编辑器:
vi traefik.toml
按i进入插入模式,然后添加两个命名的 entryPoint , http 和 https ,默认情况下所有后端都可以访问:
defaultEntryPoints = ["http", "https"]
稍后来配置 http 和 https 的 entryPoint 。
下一步,我们配置 api Provider ,它可以让我们访问监控面板,这个地方把上面 htpasswd 生成的密码拷过来。
...
[entryPoints]
[entryPoints.dashboard]
address = ":8080"
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = ["admin:your_encrypted_password"]
[api]
entrypoint="dashboard"
dashboard 是在 Traefik 容器里单独运行的 web ui,端口是 8080
-
entrypoints.dashboard节点是告诉 Traefik 我们如何与api通讯 -
entrypoints.dashboard.auth.basic节点是为dashboard配置HTTP Basic验证
已经配置好了 dashboard 的 entryPoint,还需要配置其他标准的 HTTP 和 HTTPS 连接的 entryPoint。
entryPoints 节点配置的是 Traefik 可以监听或者代理的地址,把下面这部分添加进去:
...
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
...
HTTP 的默认端口是 80, HTTPS 的默认端口是 443,上面配置的意思是将 HTTP 请求重定向到 HTTPS中。
下一步,配置 Let's Encrypt
... [acme] email = "your_email@your_domain" storage = "acme.json" entryPoint = "https" onHostRule = true [acme.httpChallenge] entryPoint = "http"
此部分称为 acme ,ACME 是用于与 Let's Encrypt 通信并且管理证书的协议名称。 Let’s Encrypt 服务需要使用有效的电子邮件地址进行注册。然后,我们指定将把我们将从 Let’s Encrypt 接收的信息存储在名为 acme.json 的JSON文件中。
-
entryPoint是需要指要处理的入口点类型,在我们的例子中是 https。 -
onHostRule是让Traefik决定如何生成证书,true表示当设置了HostName的容器一经创建就生成。
最后,把下面的添加进去来配置 Docker Provider
... [docker] domain = "your_domain" watch = true network = "web"
Docker Provider 可以让 Traefik 充当 Docker 容器前的反向代理角色,上面配置的意思是监听 network 为 web 的容器
到此为止, traefik.toml 应该是这样的:
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.dashboard]
address = ":8080"
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = ["admin:your_encrypted_password"]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[api]
entrypoint="dashboard"
[acme]
email = "your_email@your_domain"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
[docker]
domain = "your_domain"
watch = true
network = "web"
第二步:启动 Traefik 容器
首先,为 Docker 创建一个 network: web
docker network create web
当 Traefik 容器启动时,我们会将其添加到此网络中。稍后在此网络中添加其他容器,以便 Traefik 监听和代理。
接下来,创建一个空文件,它将保存我们的 Let’s Encrypt 的加密信息,并设置权限。
touch acme.json chmod 600 acme.json
启动:
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD/traefik.toml:/traefik.toml \ -v $PWD/acme.json:/acme.json \ -p 80:80 \ -p 443:443 \ -l traefik.frontend.rule=Host:monitor.your_domain \ -l traefik.port=8080 \ --network web \ --name traefik \ traefik:1.7.6-alpine
其中两个标签告诉 Traefik 将 monitor.your_domain 的流量导入到容器的 8080 端口,也就是监控仪表盘暴露的端口号。
容器启动成功后,访问 https://monitor.your_domain 来查看控制台,如图所示。
第三步:在 Traefik 中注册容器
运行 Traefik 容器成功后,来跑我们自己的容器:
使用 docker-compose :
version: "3"
networks:
web:
external: true
internal:
external: false
为了让 Traefik 能发现他们,他们必须在一个网络环境中,因此我们手动创建了 docker network ,下面开始定义 services :
version: "3"
networks:
web:
external: true
internal:
external: false
services:
blog:
image: wordpress:4.9.8-apache
environment:
WORDPRESS_DB_PASSWORD:
labels:
- traefik.backend=blog
- traefik.frontend.rule=Host:blog.your_domain
- traefik.docker.network=web
- traefik.port=80
networks:
- internal
- web
depends_on:
- mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:
networks:
- internal
labels:
- traefik.enable=false
adminer:
image: adminer:4.6.3-standalone
labels:
- traefik.backend=adminer
- traefik.frontend.rule=Host:db-admin.your_domain
- traefik.docker.network=web
- traefik.port=8080
networks:
- internal
- web
depends_on:
- mysql
启动之前设置好环境变量:
export WORDPRESS_DB_PASSWORD=secure_database_password export MYSQL_ROOT_PASSWORD=secure_database_password
愉快的启动吧:
docker-compose up -d
再回到控制台:
访问配置的域名: db-admin.your_domain blog.your_domain 已经跑起来了,不要忘了在域名控制台配置域名解析
完事,再也不用每次都去修改 nginx/caddy 的 conf 了
以上所述就是小编给大家介绍的《如何使用 traefik 作为 docker 容器的反向代理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 容器云架构中使用gorouter+haproxy作为流量入口
- 使用Kubernates和Docker将Spring Boot与MongoDB作为容器部署
- DEVOPS技术实践_16:使用Centos容器作为salve的报错offline的问题
- Kubernetes 1.13发布:利用Kubeadm简化集群管理,容器存储接口以及作为默认DNS的CoreDNS全面实现普...
- React 组件模式-有状态组件 x 无状态组件、容器组件 x 展示组件、高阶组件 x 渲染回调(函数作为子组件)
- 使用Elasticsearch作为主数据存储
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Algorithmic Beauty of Plants
Przemyslaw Prusinkiewicz、Aristid Lindenmayer / Springer / 1996-4-18 / USD 99.00
Now available in an affordable softcover edition, this classic in Springer's acclaimed Virtual Laboratory series is the first comprehensive account of the computer simulation of plant development. 150......一起来看看 《The Algorithmic Beauty of Plants》 这本书的介绍吧!