我正在尝试配置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
我想像这样配置整个堆栈和网络服务器:
我怎样才能做到这一点?在没有swarm模式和堆栈的情况下,我使用了jwilder / nginx-proxy工作得很好但是这个伟大的docker镜像不支持堆栈(swarm模式)。
我不知道从哪里开始,在“非群集模式”中我可以使用127.0.0.1:8080:80格式的端口配置,并且我的容器在公共IP上无法访问。我使用了jwilder / nginx-proxy,它自动填充了容器IP,并使用作为env变量传递的主机名将公共IP绑定到它。
我如何实现类似的目标?