如果我要添加 traefik 反向代理,是否应该从所有 docker 应用程序中删除 Nginx?

如果我要添加 traefik 反向代理,是否应该从所有 docker 应用程序中删除 Nginx?

我希望大幅减少当前许多 Docker 应用程序使用的公开端口的数量。

每个 docker 应用程序至少包含一个 Nginx 和一个 Python Flask,这是一种非常常见的设置技术 -https://blog.nolanemirot.com/2016/03/11/deploy-a-flask-app-with-gunicorn-and-docker/

我计划按照本教程进行设置https://www.digitalocean.com/community/tutorials/how-to-use-traefik-as-a-reverse-proxy-for-docker-containers-on-ubuntu-18-04

与我的由 Nginx 和 Python Flask 组成的 docker 应用程序不同,给定的示例使用 WordPress 作为 docker 应用程序示例。

就我的情况而言,我想知道在每个 docker 应用程序端是否还需要一个 Nginx?它是多余的,还是应该仍然存在?

答案1

[编辑] Traefik 将与你的 docker 守护进程通信。它将监听具有“traefik”标志,并调整其配置。例如:

-l traefik.frontend.rule=Host:monitor.your_domain
-l traefik.port=8080

如果你的容器正在运行一个应用程序,并且该应用程序正在监听docker网络接口上的网络端口,那么你只需要设置-l traefik.port={你的应用端口},它应该可以工作。你需要容器​​与 traefik 位于同一个 docker 网络上,即“ - 网络名字}”选项是。
因此,只要您的 flask 应用程序可以侦听端口,您就不需要 nginx。您也不需要在 flask 应用程序容器和主机之间进行端口绑定。
您只需要从外部 docker 网络访问端口 80 上的 traefik 容器。
如果您想运行多个应用程序,您可能需要设置您的 hosts 文件或(本地?)DNS 以使用多个名称指向您的 traefik 主机,例如:

127.0.0.1  app1.mytraefik
127.0.0.1  app2.mytraefik
127.0.0.1  app3.mytraefik

然后设置 app1 的标签“frontend.rule=Host:app1.mytraefik”。Traefik 将读取您的 http HOST 标头,并通过 docker 网络将请求定向到“traefik.port”标签中端口上的容器

相关内容