Seguimos con los posts de docker y ahora toca uno sobre el tema de networking.
La necesidad básica es la de publicar a Internet un servidor web con nginx. En lugar de definir la IP pública al servidor docker nos interesa ponerla dentro del contenedor de nginx y luego que él sea el que tenga acceso al resto de máquinas.
El servidor de docker con el que estoy trabajando es una máquina física con debian con una IP de guifi (10.90.234.170) y en el datacenter donde está en la VLAN 138 está el rango de IP públicas (5.10.205.128/27).
Crear la network
Docker por defecto trae 3 networks, por defecto cuando creamos un contenedor nuevo asigna la red bridge (driver bridge) 172.17.0.0/16
root@wezen02:~# docker network ls NETWORK ID NAME DRIVER SCOPE f9e3dcfa1e06 bridge bridge local 262f24ac9f10 host host local c4572142389a none null local
Para crear una nueva red y vincularla a la vlan correspondiente usaremos lo siguiente:
# docker network create -d macvlan -o parent=eno1.138 public
Cuando creamos una nueva red docker le asigna un rango por defecto correlativo al último rango creado, por ejemplo 172.18.0.0/16 pero nos interesa que cuando asignemos ésta network a un contenedor le asigne una IP de nuestro rango público.
# docker network rm public # docker network create -d macvlan -o parent=eno1.138 public --subnet=5.10.205.128/27 --gateway=5.10.205.129 --ip-range 5.10.205.152/29
Con –subnet indicamos la red en la que trabaja la network, –gateway la puerta de enlace de nuestro router e –ip-range el rango que asignará automáticamente a los …