
Perdóneme si hago una pregunta estúpida, pero estoy construyendo un servidor donde alojaré varios sitios web de Flask Docker Container usando Nginx Docker. Mi pregunta ahora es: ¿es mejor tener un contenedor acoplable Nginx principal y luego alojar todos mis contenedores Docker de sitios web en él o tener un contenedor acoplable Nginx para cada aplicación con Docker Compose?
Quiero saber en términos de manejo de recursos y eficiencia ¿cuál es mejor?
@Jacob Siguiendo tu respuesta, estoy intentando configurar algo como esto
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
Ahora cada sitio web está disponible en localhost:8085 y localhost:8086
Luego estoy usando un proxy inverso en Nginx (no Docker sino el que está instalado en mi servidor) para redirigir el tráfico a mi nombre de dominio:
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
}
Respuesta1
No es una pregunta estúpida, pero aclaremos, no importa cómo configure nginx y Docker, una IP de host solo puede vincular un servicio a un puerto, por lo que si desea manejar varios sitios web en una dirección IP en el puerto 80/443 (http/ https) solo podrá ejecutar UN contenedor nginx para manejar el enrutamiento entre diferentes nombres de host (hosts virtuales) y redirigir el tráfico a su backend apropiado.
También deberá exponer estos backends en diferentes puertos o compartir la misma red acoplable.
Algo que quizás quieras considerar es una alternativa al contenedor nginx estándar con algo más orientado a backends más dinámicos comoTraefikoproxy nginx