docker proxy Поддомены/домены для разных контейнеров
Primary tabs
Пример конфигурации для nginxproxy/nginx-proxy:
docker-compose.yml с конфигом для прокси:
version: '3.9'
services:
nginx-proxy:
container_name: nginx-proxy-double-test-proxy
image: nginxproxy/nginx-proxy
ports:
- "8888:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxynet
networks:
proxynet:
name: custom_network
Отдельный docker-compose-app.yml для приложения, например:
version: '3.9'
services:
whoami:
container_name: nginx-proxy-double-test-app
image: jwilder/whoami
expose:
- "8000"
environment:
- VIRTUAL_HOST=whoami-second-compose.local
- VIRTUAL_PORT=8000
networks:
- proxynet
networks:
proxynet:
name: custom_network
external: true
Makefile c командами для теста (или можно выполнять напрямую в терминале):
start: docker-compose -f ./docker-compose.yml up -d docker-compose -f ./docker-compose-app.yml up -d stop: docker-compose -f ./docker-compose.yml stop docker-compose -f ./docker-compose-app.yml stop test.proxy: curl -H "Host: whoami-second-compose.local" localhost:8888 sleep: sleep 1 retest: stop start sleep test.proxy
Источники:
- Основная идея - Communication between multiple docker-compose projects: https://stackoverflow.com/a/48024244
- https://stackoverflow.com/questions/3618...
- https://github.com/nginx-proxy/nginx-proxy
- Log in to post comments
- 1413 reads
vedro-compota
Sat, 04/22/2023 - 22:06
Permalink
черновик (не проверено)
Если у вас есть несколько файлов docker-compose.yml,
вы можете использовать функционал docker-compose --project-name
для создания проектов с разными именами для каждого файла.
Например, у вас может быть файл docker-compose-app1.yml,
содержащий настройки для app1, и файл docker-compose-app2.yml,
содержащий настройки для app2.
В таком случае вы можете запустить контейнер jwilder/nginx-proxy
с параметром --project-name для каждого файла, чтобы создать отдельные проекты:
css
При этом jwilder/nginx-proxy запускается один раз,
но для каждого проекта создается свой сетевой пространство
и DNS-сервер, что позволяет использовать разные домены для каждого проекта.
Пример docker-compose.yml файла для jwilder/nginx-proxy, который поддерживает два проекта app1 и app2, может выглядеть так:
yaml version: '3' services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - certs:/etc/nginx/certs:ro - vhost:/etc/nginx/vhost.d - html:/usr/share/nginx/html - proxy_conf:/etc/nginx/conf.d networks: app1: app2: networks: app1: app2: volumes: certs: vhost: html: proxy_conf:Пример docker-compose-app1.yml файла для app1 может выглядеть так:
yaml version: '3' services: app1: image: myapp1 container_name: app1 environment: - VIRTUAL_HOST=app1.example.com - LETSENCRYPT_HOST=app1.example.com - LETSENCRYPT_EMAIL=youremail@example.com networks: app1: networks: app1: external: name: app1_app1А пример docker-compose-app2.yml файла для app2 может выглядеть так:
yaml version: '3' services: app2: image: myapp2 container_name: app2 environment: - VIRTUAL_HOST=app2.example.com - LETSENCRYPT_HOST=app2.example.com - LETSENCRYPT_EMAIL=youremail@example.com networks: app2: networks: app2: external: name: app1_app2Обратите внимание, что в каждом файле docker-compose-app1.yml
и docker-compose-app2.yml используется отдельное имя сети,
которое является внешним для контейнеров,
и уже определено в файле docker-compose.yml.
Это позволяет контейнерам приложений быть доступными только в своих проектах
_____________
матфак вгу и остальная классика =)