【问题标题】:Multiple docker nginx containers or single nginx docker container多个 docker nginx 容器或单个 nginx docker 容器
【发布时间】:2019-04-15 13:47:26
【问题描述】:

我正在寻找支持 tld 的多个 nginx 容器的最佳实践。请考虑以下 docker-compose 文件:

frontend:
    build:
      context: nginx/
    hostname: frontend-docker
    ports:
      - "32777:80"

backend:
    build:
      context: nginx/
    hostname: backend-docker
    ports:
      - "33777:80"

proxy:
  image: nginx
  hostname: proxy-docker
  links:
    - frontend
    - backend
  ports:
    - "80:80"

描述 如您所见,我可以在 localhost:32777 和 localhost:33777 访问前端和后端,但是当我要访问 prod 时,我想在 site.com 访问前端和在 backend.site 访问后端。 com。在这种情况下,proxy 容器会包含 server_name backend.site.com;server_name site.com 并创建到 http://frontendhttp://backend 的反向代理

我的问题是我应该摆脱代理容器并将server_name 部分直接放入frontendbackend 容器中,甚至构建一个名为web 的容器,其中包含backend and frontend在那里。

一般而言,以这种方式拆分容器在配置、环境变量、构建不同的镜像等方面更合适。

【问题讨论】:

    标签: docker nginx containers


    【解决方案1】:

    直接从外部寻址frontendbackend 容器很可能不起作用,因为您不能多次将端口80 绑定到主机。

    如果frontendbackend 是不同的应用程序,您可能希望使用不同的Dockerfiles 构建它们的映像。

    虽然我们正在研究它,但您可能想研究一个 简单 负载平衡解决方案,例如 https://traefik.io/ 作为容器的前端。 但对于您当前的用例来说,这可能有点过头了,您希望坚持使用上述配置。

    【讨论】:

    • 是的,我不能在端口 80 上绑定两个,但我可以将它们全部捆绑到一个容器中。他们有图像,不同的数据库 - 这是一种简化的配置,仅用于在世界之外访问它们。我应该捆绑到一个 nginx 还是 3 个。性能损失是什么?
    • 一般来说,你运行的东西(进程)越多,你需要的资源就越多。我更喜欢将关注点分开,所以如果frontendbackend 在不同的环境中做不同的事情,将它们捆绑在一起可能会令人困惑。 frontendbackend 的负载有多大,它们需要多少 RAM?如果您有更多的前端访问者/点击(我可以想象),您可能需要启动两个或更多容器来处理请求。如果这意味着您总是必须包含后端所需的资源,那将是一个坏主意。如果不知道任何细节,我会选择超过 1 张图片。
    • 总的来说,我和你有同样的理由。但在我的办公室里,我们与同事争吵,这就是我决定在这里问的原因。因此,一般而言,如果您只想公开虚拟主机服务器名称,您应该在单独的代理容器中进行,或者这将是后端和前端容器的一部分。
    • 我将 docker 容器视为具有输入和输出端口的服务。结束。处理前端 Web 服务器、路由、TLS 证书等是别人的工作。所以,是的,应用程序容器中没有server_name
    • 否,但如果您在应用程序映像中包含 server_name,您将限制自己只能运行一个容器。没有缩放,没有负载平衡。听起来你在混淆 docker 和虚拟机。它们是服务,而不是主机。
    猜你喜欢
    • 2022-01-22
    • 2021-07-22
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2021-08-26
    • 2023-03-25
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多