[英]2 apps with different port in single docker-compose and nginx reverse proxy
[英]Multiple apps (microservices) and one proxy (nginx) docker-compose configuration/architecture
具有以下架構:
以下哪個選項最適合在生產環境中部署?
docker-compose -f microservice1/docker-compose.yml -f microservice2/docker-compose.yml -f proxy/docker-compose.yml up
. 這樣,代理容器(例如 nginx)將有權訪問微服務,以便能夠根據請求重定向到一個或另一個。docker network create nginx_network
。 然后,在每個 docker-compose 文件中,應該在必要的容器中引用此網絡,以便代理具有微服務的可見性,從而能夠在配置中使用它們。 以下鏈接中有一個示例https://stackoverflow.com/a/48081535/6112286 。第一個選項很簡單,但在配置許多微服務或應用程序時幾乎沒有靈活性,因為所有應用程序的所有 docker-compose 都需要合並以生成最終配置。 第二個選項使用網絡,這是 Docker 的基本支柱。 另一方面,您不需要合並所有 docker-compose。
在這兩個選項中,考慮到有多個微服務並且需要單個代理來配置訪問的場景,哪個最好? 為什么?
提前准備好。
docker-compose 旨在在一個文件中編排多個容器。 我不知道您的 docker-compose 文件的內容,但正確的方法是編寫一個docker-compose.yml
,其中可能包含:
version: '3.7'
services:
microservice1_app:
image: ...
volumes: ...
networks:
- service1_app
- service1_db
microservice1_db:
image: ...
volumes: ...
networks:
- service1_db
microservice2_app:
image: ...
volumes: ...
networks:
- service2_app
- service2_db
microservice2_db:
image: ...
volumes: ...
networks:
- service2_db
nginx:
image: ...
volumes: ...
networks:
- default
- service1_app
- service2_app
volumes:
...
networks:
service1_app:
service1_db:
service2_app:
service2_db:
default:
name: proxy_frontend
driver: bridge
通過這種方式, nginx
容器能夠通過microservice1_app
主機名與microservice1_app
容器進行通信。 如果需要其他主機名,可以在服務networks
部分中使用aliases
子部分進行配置。
安全性紅利在以上配置, microservice1_db
只有通過可見microservice1_app
(同為microservice2
)和nginx
是只能看到microservice1_app
和microservice2_app
,距離碼頭工人(外部可達bridge
模式)
還有第三種方法,例如記錄在https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.php和https://github.com/Einsteinish/ Docker-compose-Nginx-Reverse-Proxy-II/ 。 它的要點是讓代理加入所有其他網絡。 因此,您可以保持其他撰寫文件(可能來自軟件分發)保持不變。
version: '3'
services:
proxy:
build: ./
networks:
- microservice1
- microservice2
ports:
- 80:80
- 443:443
networks:
microservice1:
external:
name: microservice1_default
microservice2:
external:
name: microservice2_default
代理將通過名稱microservice1_app_1
和microservice2_app_1
引用主機,假設服務在目錄microservice1
和microservice2
中稱為app
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.