Docker堆栈通过主机名

时间:2018-05-23 17:36:04

标签: docker reverse-proxy docker-swarm docker-stack

我正在尝试配置docker stack以立即运行我的一些应用程序。它将被部署到同一台机器上的多个客户,而且有点复杂 - 3个API服务和两个网站。

我想为每个客户创建堆栈,以限制为新客户配置此应用程序所需的开销 - 由于堆栈,我可以立即运行这些api和网站,提供环境变量。

我的生产机器只有一个公共IP。我有安装了swarm模式的docker(它需要使用堆栈)。 Hovewer我的swarm只是一台机器,我认为这是很长一段时间 - 我只是不需要更多的资源。

简化的撰写文件(只有2个服务)如下所示:

version: "3.2"
services:
  auth_api:
    image: my-registry/auth-api:latest
    stdin_open: true
    tty: true
    ports:
      - 8010:80
    deploy:
      mode: global
    environment:
      - some_var
    volumes:
      - /var/my-app/${INSTANCE_NAME}:/store
    secrets:
      - auth_certificate

  office_web:
    image: my-registry/office-web:latest
    stdin_open: true
    tty: true
    ports:
      - 8012:80
    deploy:
      mode: global

secrets:
  auth_certificate:
    external:
      name: ${INSTANCE_NAME}-auth-identity-certificate

此堆栈已创建,我的应用程序可在公共IP服务器上使用,端口8080和8081是不良行为。

承认: 我的网络服务器有一个公共IP:A.B.C.D 我将DNS配置为将两个子域指向我的Web服务器:

A.B.C.D api.example.com

A.B.C.D web.example.com

我想像这样配置整个堆栈和网络服务器:

  • 服务auth_api仅在端口80的公共IP上公开,主机名配置为api.example.com
  • service office_web仅在端口80的公共IP上公开,主机名配置为web.example.com
  • 两个服务都无法在公共IP上的已发布端口上访问 - 8080,8081
  • 当我为新客户创建新堆栈时,我不想“反对代理?”来自动填充新的公共主机名绑定;我可以在创建堆栈时将它们作为标签/ env变量提供,但我不想在我的compose yaml文件旁边手动编辑其他内容

我怎样才能做到这一点?在没有swarm模式和堆栈的情况下,我使用了jwilder / nginx-proxy工作得很好但是这个伟大的docker镜像不支持堆栈(swarm模式)。

我不知道从哪里开始,在“非群集模式”中我可以使用127.0.0.1:8080:80格式的端口配置,并且我的容器在公共IP上无法访问。我使用了jwilder / nginx-proxy,它自动填充了容器IP,并使用作为env变量传递的主机名将公共IP绑定到它。

我如何实现类似的目标?

0 个答案:

没有答案