En este nuevo post vamos a ver un poco por encima las distintas redes disponible en Docker, las redes siempre son un dolor de cabeza como no este correctamente configuradas y entendamos por donde pasa nuestro tráfico.
Network Driver
Bridge
El tipo Bridge, es el que se utiliza por defecto cuando no se especifica, nuestro Host establece un puento de software a los contenedores, pero aisla de un red a otra..
Cada vez que se crea un container genera automaticamente un nombre DNS para su resolución.
Use bridge networks | Docker Documentation
Pruebas Bridge
He creado dos redes bridge 10.10.0.0/24 y 10.20.0.0/24, he creado 4 containers, 2 a un red y 2 a la otra.
docker network create Bridge-01 --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1
docker network create Bridge-02 --driver bridge --subnet 10.20.0.0/24 --gateway 10.20.0.1
docker run -dit --name BG-01 --network Bridge-01 alpine ash
docker run -dit --name BG-02 --network Bridge-01 alpine ash
docker run -dit --name BG-03 --network Bridge-02 alpine ash
docker run -dit --name BG-04 --network Bridge-02 alpine ash
Me conecto al Container BG-01 (docker attach <Container>) que esta en la red Bridge-01, realizamos las siguientes pruebas:
- Ping al Container BG-02 en la Misma Red, responde OK.
- Ping al Container BG-03 y BG-04 en la Distinta Red, responde KO.
- Ping a IP BG-03 en Distinta Red, responde KO.
- Ping a red externa OK.


Para salir de la maquina si que se apage CTRL
+ p
CTRL
+ q
HOST
Parecido a Bridge, pero elimina el aislamiento de red entre el contenedor y el host de Docker, y use la red del host directamente.
El driver host solo funciona en hosts Linux y no es compatible con Docker Desktop para Mac, Docker Desktop para Windows o Docker Windows Server.
Las opciones de port al crear un container se omitirán dado que responderá con la IP del Host.
No se pueden crear más redes con el driver host.

Use host networking | Docker Documentation
Pruebas HOST
Vamos a realizar unas pruebas a ver que nos devuelve.
docker run -dit --name HO-01 --network host alpine ash
docker attach HO-01
Intentamos llegar a las dos redes Bridge que generamos en el Tipo Bridge y llegamos perfectamente, que en el Bridge entre ellas no se veían.

Hacemos ping al nombre del host y me devuelve como localhost y a nombre publico sin problemas.

Si miramos la IP del container nos devuelve la configuración el Host.

OVERLAY
Para la red Overlay se necesita un entorno de Docker Swarm, esta red nos permite generar una red interna extendida entre todos los nodos de Swarm.
Al agregar un host Docker a un Swarm nos creara dos nuevas redes:
- una overlay con el nombre de Ingress, que maneja el tráfico entre los servidores del Swarm y será la red por defecto si no especificamos a que red agregar un servicio.
- y otra red docker_gwbridge, conecta el host con los otros hosts del swarm, también conecta las redes overlay.

Usar redes superpuestas | Documentación acoplable (docker.com)
docker network create --driver overlay Mi-Red
Para Cifrar red overlay
Para cifra una red basta con agregar el parámetro –opt encrypted
docker network create --opt encrypted --driver overlay Mi-Red
IPVLAN
El controlador IPVLAN, nos permite conectar la red en Capa 2/Capa 3 con la tarjeta de red del Host y eliminar el Bridge del Host, nos permitirá segmentar los container con VLANs, los que sería parecido al modo tradicional.
Usar redes IPvlan | Documentación acoplable (docker.com)
Pruebas Capa 2
En mi caso, creare una red IPVlan a mi red 192.168.60.0/24 con Gateway 192.168.60.254, y me asignara IPs del dicho rango a los containers.

El comando sera el siguiente:
docker network create -d ipvlan \
--subnet=192.168.60.0/24 \
--gateway=192.168.60.254 \
-o ipvlan_mode=l2 \
-o parent=ens160 \
Mi-IPVlan

El Container asignará una IP de mi rango 192.168.60.1

Realizo un ping a otra red para que pase a través del Gateway

Y en el Firewall puedo ver que el container con la ip asignada.

MACVLAN
El controlador MACVlan nos permite asignar MAC a la tarjeta de red, por ejemplo para uso de trafico de red que es necesaria una MAC.
docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 \
Mi-MACVLAN
Usar redes macvlan | Documentación acoplable (docker.com)
NONE
Con este tipo de controlador el container no tendra red y estará totalmente aislada.
docker run -dit \
--network none \
--name None-01 \
alpine:latest ash
Crear Network
Para crear una nueva red, muy fácil docker network create Mi_Red.
Si no se especifica, por defecto nos la crea en tipo bridge.
docker network create Mi_Red

Ejemplo, crear la red Bridge-01, tipo bridge, con el rango 10.10.0.0/24 y su gateway.
docker network create Bridge-01 --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1
Remover Network
Para remover las redes usaremos el comando siguiente:
docker network rm <Network>

Si borramos una red que contenga container estos se quedaran sin red.
Conectar/Desconectar red de Container
Para conectar o desconectar un container a la red, solo necesitamos usar uno de estos comandos:
docker network connect <Network> <Container>
docker network disconnect <Network> <Container>
Compose YAML
Vamos a configurar la nuestra red desde un fichero YAML.
Ejemplo 1
En este ejemplo teniendo una red existente le diremos a que los containers se conecten a dicha red.
docker network create DemoNet --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1
Solo necesitamos especificar el nombre de la red.
version: '3.8'
services:
Demo-Network:
image: alpine:latest
container_name: Net-Compose
stdin_open: true # docker run -i
tty: true # docker run -t
restart: unless-stopped
networks:
- DemoNet
networks:
DemoNet:
external: true
Ejemplo 2
En este ejemplo creamos una nueva red para conectar los nuevos containers.
version: '3.8'
services:
Demo-Network:
image: alpine:latest
container_name: Net-Compose
stdin_open: true # docker run -i
tty: true # docker run -t
restart: unless-stopped
networks:
- NewNet
networks:
NewNet:
driver: ipvlan
ipam:
driver: default
config:
- subnet: 192.168.60.0/24
gateway: 192.168.60.254
Mordor Blog – Parte 1 – Instalar Dockers en Raspberry-Pi
Mordor Blog – Parte 2 – Instalar Docker Compose
Mordor Blog – Parte 3 – Desplegar Pi-Hole con DoH y Docker Compose