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
docker network create nombreDeLaRed
docker network connect nombreDeLaRed nombreDelContenedor
docker container run con la opción –network=nombreDeLaReddocker 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
¿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.
-p puertoExterno:puertoInterno ya que ahora el contenedor no se va a exponer al exterior. -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.
Mas información:
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