Herramientas de usuario

Herramientas del sitio


clase:daw:daw:1eval:tema04.c

Tabla de Contenidos

4.c Despliegue avanzado en Servidor: Redes y Proxy

Gestión de Redes

Docker permite crear redes aisladas entre los distintos contenedores. De esa forma , si un contenedor es atacado, no se tendrá acceso por red al resto de los contenedores sino únicamente a los de su propia red.

Orden Explicación
docker network create Crea una red
docker network rm Borrar una red
docker network ls Ver las redes que hay
docker network connect Conecta un contenedor a una red
docker network disconnect Desconecta un contenedor de una red

Para trabajar con redes, lo que debemos hacer es

  • Primero crear la red:
docker network create nombreDeLaRed
  • Conectar un contenedor a esa red
docker network connect nombreDeLaRed nombreDelContenedor
  • También podemos conectar la red al contenedor al usar docker container run con la opción –network=nombreDeLaRed
docker container run \
 -dit \
 -v /opt/mariadb:/var/lib/mysql  \
 -e MYSQL_ROOT_PASSWORD=root  \
 -p 4000:3306  \
 --network nombreDeLaRed \
 --name  prueba_mariadb \
 mariadb:10.1




Proxy con Nginx

¿Recuerdas la cabecera Host de HTTP? Servía para indicar a que servidor web iba dirigida la petición ya que en una misma máquina se ponían varios servidores web.

Pues vamos ahora a configurar Docker para que todos los servidores compartan el mismo puerto (el 80). Para ello vamos a usar un servidor proxy llamado Nginx. Obviamente, Nginx va estar dentro de otro contenedor de Docker. La imagen a usar es jwilder/nginx-proxy con tag 0.7.0.

Para arrancar el servidor usamos la siguiente orden:

sudo docker container run \
  -dit \
  -p 80:80 \
  --restart always \
  -v /var/run/docker.sock:/tmp/docker.sock:ro \
  --name nginx-proxy \
  nginxproxy/nginx-proxy:1.1.0 
  

Como vemos no tiene nada de especial excepto la línea -v /var/run/docker.sock:/tmp/docker.sock:ro pero solo decir que es para que Nginx pueda acceder al Docker real de la máquina real.

Y ahora , ¿Como arrancamos nuestro servidores web? Pues simplemente hay que añadir dos parámetros y quitar uno.

  • Y hay que quitar el parámetro de -p puertoExterno:puertoInterno ya que ahora el contenedor no se va a exponer al exterior.
  • Hay que añadir:
    • -e VIRTUAL_PORT=puertoInterno: Siendo puertoInterno donde está escuchando nuestro servidor Web. Esa información la sabremos por la documentación
    • -e VIRTUAL_HOST=nombreDominio: Siendo nombreDominio el nombre del dominio que queremos que gestione el servidor que estamos arrancando.

Veamos el siguiente ejemplo:

sudo docker container run \
  -dit \
  -v /home/alumno/lorenzo/httpd:/var/www/html \
  -e VIRTUAL_PORT=80
  -e VIRTUAL_HOST=lorenzo.daw2.pve3.fpmislata.com  \
  --name lorenzo_apache \
  php:8.1-apache-bullseye

Vemos que el servidor está escuchando en el puerto 80 y va a gestionar las peticiones del dominio lorenzo.daw2.pve3.fpmislata.com que lleguen a Nginx.

Los servidores de Base de datos u otros contenedores que no son el servidor web no tienen que hacer nada especial por usar Nginx ya que no se accede a ellos a través del proxy sino directamente a ellos o únicamente de forma interna.

Mas información:

El fichero hosts

Ahora para que funcione el proxy con nginx ya no podemos acceder a la máquina real con la IP sino que habrá que usar el nombre de dominio. Si no tenemos acceso a un nombre de dominio real, podemos simular nosotros uno modificando el fichero hosts de la máquina donde vayamos a hacer la petición.

El fichero hosts simplemente contiene IPs y nombre e dominio que usará nuestro ordenador. De esa forma simularemos tener un dominio.

En los siguientes artículos se explica como modificar el fichero hosts




clase/daw/daw/1eval/tema04.c.txt · Última modificación: por 127.0.0.1