【发布时间】:2019-03-29 12:13:23
【问题描述】:
在这个项目中,我有一个 apache docker 容器(称为负载均衡器),它指向两个 apache docker 容器中的任何一个。如果路径是“/support*”,那么它会转到支持容器,否则会转到 webapp。目前为了实现这一点,我已经硬编码了我的 docker compose networks 子网和每个容器的 ipv4 地址。然后一个 apache conf 文件只指向那些硬编码的 ips。这非常适合本地开发环境。
但是,它不适用于需要托管多个项目实例的临时服务器。由于硬编码的子网/ipv4 地址,我无法启动此 docker-compose 网络的多个实例。如何在不对子网进行硬编码的情况下实现此负载均衡器设置,以便拥有多个实例。或者是否有更好的解决方案来实现将多个副本托管在单个服务器上的预期效果,例如 apache 容器中的许多虚拟主机。你有什么建议?因为我不知道这里的最佳做法是什么。
loadbalancer.conf
<VirtualHost *:80>
TimeOut -1
ProxyPass "/support" "http://172.20.0.5/support"
ProxyPassReverse "/support" "http://172.20.0.5/support"
ProxyPass "/" "http://172.20.0.2/"
ProxyPassReverse "/" "http://172.20.0.2/"
ProxyPreserveHost On
TimeOut -1
</VirtualHost>
docker-compose.yml
version: '3.7'
networks:
pi-net:
ipam:
config:
- subnet: 172.20.0.0/24
services:
cli:
container_name: cli
build: ./docker/cli
networks:
pi-net:
ipv4_address: 172.20.0.3
volumes:
- type: bind
source: .
target: /srv/www
- type: bind
source: $HOME/.gitconfig
target: /home/developer/.gitconfig
extra_hosts:
- "pi.docker:172.20.0.2"
user: developer
stdin_open: true
tty: true
environment:
GIT_PAGER: cat
webapp:
container_name: webapp
build:
context: ./docker/web-server
args:
- vhostsFileName=webapp.conf
networks:
pi-net:
ipv4_address: 172.20.0.2
ports:
- 80
volumes:
- type: bind
source: .
target: /srv/www
# depends on cli because cli entrypoint.sh is creating var/ files needed by httpd
depends_on:
- "cli"
support:
container_name: support
build:
context: ./docker/web-server
args:
- vhostsFileName=support.conf
networks:
pi-net:
ipv4_address: 172.20.0.5
ports:
- 80
volumes:
- type: bind
source: .
target: /srv/www
# depends on cli because cli entrypoint.sh is creating var/ files needed by httpd
depends_on:
- "cli"
loadbalancer:
container_name: loadbalancer
build:
context: ./docker/web-server
args:
- vhostsFileName=loadbalancer.conf
networks:
pi-net:
ipv4_address: 172.20.0.6
ports:
- 80:80
db:
container_name: db
build: ./docker/mysql
networks:
pi-net:
ipv4_address: 172.20.0.4
ports:
- 3306:3306
volumes:
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: pi
MYSQL_USER: root
MYSQL_PASSWORD: root
restart: always
volumes:
db:
driver: local
【问题讨论】:
-
这是针对常规 docker 容器的,我不确定您是否可以获取 args 来修改 yml 文件本身
标签: apache docker docker-compose reverse-proxy