Docker Nginx único vs Docker Nginx múltiplo para sites

Docker Nginx único vs Docker Nginx múltiplo para sites

Perdoe-me se estou fazendo uma pergunta estúpida, mas estou construindo um servidor onde hospedarei vários sites Flask Docker Container usando Nginx Docker. Minha pergunta agora é: é melhor ter um contêiner docker nginx principal e hospedar todos os meus contêineres Docker de sites nele ou ter um contêiner docker Nginx para cada aplicativo com docker compose?

Quero saber em termos de manuseio e eficiência de recursos qual é o melhor para escolher?

@Jacob Seguindo sua resposta, estou tentando configurar algo assim

docker-compose.yml:

version: "3.8"

services:
  portfolix:
    container_name: portfolix
    image: mervin16/portfolix:dev
    env_file:
      - config_local.env
    expose:
      - 8086
    restart: always
    networks:
      - sky_net

  mes:
    container_name: mes
    image: mervin16/mes:dev
    networks:
      - sky_net
    expose:
      - 8085
    restart: always

  nginx:
    build: ./nginx
    container_name: nginx
    ports:
      - "8085:85"
      - "8086:86"
    restart: always
    networks:
      - sky_net

networks:
  sky_net:
    name: sky_network
    driver: bridge

Agora cada site está disponível em localhost:8085 e localhost:8086

Estou usando um proxy reverso no Nginx (não o docker, mas aquele instalado no meu servidor) para redirecionar o tráfego para o meu nome de domínio:

server {

server_name   mes.th3pl4gu3.com;

  location / {
    access_log  /var/log/nginx/mes/access_mes.log;
    error_log  /var/log/nginx/mes/error_mes.log;
    proxy_pass  http://localhost:8081;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mes.th3pl4gu3.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mes.th3pl4gu3.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = mes.th3pl4gu3.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


 listen        80;
  server_name   mes.th3pl4gu3.com;
    return 404; # managed by Certbot


}

Responder1

Não é uma pergunta estúpida, mas vamos esclarecer, não importa como você configura o nginx e o docker, um IP de host só pode vincular um serviço a uma porta, portanto, se você deseja lidar com vários sites em um endereço IP na porta 80/443 (http/ https), você só poderá executar UM contêiner nginx para lidar com o roteamento entre diferentes nomes de host (hosts virtuais) e redirecionar o tráfego para o back-end apropriado.

Você também precisará expor esses back-ends em portas diferentes ou compartilhar a mesma rede docker.

Algo que você pode querer considerar é uma alternativa ao contêiner nginx de estoque com algo mais voltado para back-ends mais dinâmicos, comoTraefikouproxy nginx

informação relacionada