我希望大幅减少当前许多 Docker 应用程序使用的公开端口的数量。
每个 docker 应用程序至少包含一个 Nginx 和一个 Python Flask,这是一种非常常见的设置技术 -https://blog.nolanemirot.com/2016/03/11/deploy-a-flask-app-with-gunicorn-and-docker/
与我的由 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”标签中端口上的容器