簡體   English   中英

多個應用程序(微服務)和一個代理(nginx)docker-compose 配置/架構

[英]Multiple apps (microservices) and one proxy (nginx) docker-compose configuration/architecture

具有以下架構:

  • 微服務 1 + 數據庫 (microservice1/docker-compose.yml)
  • 微服務 2 + 數據庫 (microservice2/docker-compose.yml)
  • 代理(代理/docker-compose.yml)

以下哪個選項最適合在生產環境中部署?

  1. Docker Compose 覆蓋。 每個微服務都有一個 docker-compose,代理有另一個 docker-compose。 生產部署完成后,所有 docker-compose 將合並為一個(使用docker-compose -f microservice1/docker-compose.yml -f microservice2/docker-compose.yml -f proxy/docker-compose.yml up . 這樣,代理容器(例如 nginx)將有權訪問微服務,以便能夠根據請求重定向到一個或另一個。
  2. 共享外部網絡。 每個微服務都有一個 docker-compose,代理有另一個 docker-compose。 首先,必須創建一個外部網絡來將代理容器與微服務鏈接起來。 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_appmicroservice2_app ,距離碼頭工人(外部可達bridge模式)

還有第三種方法,例如記錄在https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.phphttps://github.com/Einsteinish/ Docker-compose-Nginx-Reverse-Proxy-II/ 它的要點是讓代理加入所有其他網絡。 因此,您可以保持其他撰寫文件(可能來自軟件分發)保持不變。

docker-compose.yml

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_1microservice2_app_1引用主機,假設服務在目錄microservice1microservice2中稱為app

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM