Redes en Docker
1. Drivers de Red en Docker #
Las redes en Docker permiten que los contenedores se comuniquen entre sí, con el host y con el exterior, proporcionando aislamiento por software mediante puentes virtuales e interfaces veth.
Docker incluye varios controladores de red (network drivers):
- Bridge (puente por defecto -
docker0): Es la red predeterminada en la que arrancan los contenedores si no se especifica otra. Nota importante: En la red bridge por defecto, los contenedores NO disponen de resolución DNS por nombre de contenedor (deben comunicarse por IP directa). - Bridge personalizada (User-defined Bridge): Redes creadas con
docker network create. Incluyen un servidor DNS interno integrado (127.0.0.11) que resuelve automáticamente los nombres de los contenedores como nombres de host (Service Discovery). - Host: Elimina el aislamiento de red; el contenedor comparte directamente la pila de red y los puertos del host (sin mapeo
-p, ideal para aplicaciones de altísimo rendimiento de red). - None: Deshabilita por completo la interfaz de red del contenedor (aislamiento total, solo interfaz
lode loopback). - Overlay: Permite la comunicación cifrada multi-host entre contenedores repartidos en diferentes nodos de un clúster (Docker Swarm / Kubernetes).
- Macvlan / IPvlan: Asigna una dirección MAC e IP física real de la red local al contenedor, haciéndolo visible como un dispositivo físico más en el router.
2. Comandos para gestionar redes en Docker #
docker network create <nombrered>: Crear una red #
Este comando crea una nueva red personalizada que puedes usar para conectar contenedores. Al crear una red personalizada, los contenedores que se conecten a ella podrán comunicarse entre sí usando sus nombres como si fueran direcciones IP.
Ejemplo:
1docker network create mi_red
Esto crea una red llamada mi_red a la que podrás conectar contenedores. Es útil para cuando tienes varios servicios (por ejemplo, una base de datos y una aplicación web) y quieres que se comuniquen directamente.
docker network ls: Listar redes #
Con este comando puedes ver todas las redes disponibles en tu sistema Docker.
Ejemplo:
1docker network ls
Salida esperada:
NETWORK ID NAME DRIVER SCOPE
d3f7c4ff1b8a bridge bridge local
e4f3e4e5fdad host host local
b85e0f4c3275 none null local
cf4577f83c19 mi_red bridge local
Aquí puedes ver:
- Las redes predeterminadas: bridge, host y none.
- La red personalizada que acabas de crear: mi_red, con el controlador bridge.
docker network rm <nombrered>: Eliminar una red #
Este comando elimina una red personalizada que ya no estés utilizando.
Ejemplo:
1docker network rm mi_red
Esto elimina la red mi_red. Si hay contenedores conectados a la red, Docker no permitirá eliminarla hasta que los contenedores sean desconectados o detenidos.
docker network inspect <nombrered>: Obtener detalles de una red #
Este comando proporciona información detallada sobre una red, incluyendo los contenedores conectados y la configuración de la red.
Ejemplo:
1docker network inspect mi_red
Salida esperada (resumida):
1[ 2 { 3 "Name": "mi_red", 4 "Id": "cf4577f83c19", 5 "Driver": "bridge", 6 "Containers": { 7 "e4e3f1a2b0df": { 8 "Name": "mi_contenedor", 9 "IPv4Address": "172.18.0.2/16" 10 } 11 } 12 } 13]
Aquí ves información como:
- El nombre de la red:
mi_red. - El contenedor
mi_contenedorque está conectado a esta red. - La dirección IP asignada al contenedor dentro de la red.
docker network connect <nombrered> <nombrecontenedor>: Conectar un contenedor a una red #
Este comando conecta un contenedor existente a una red. Puedes usarlo para conectar contenedores que ya están en ejecución o recién creados.
Ejemplo:
1docker network connect mi_red mi_contenedor
Esto conecta el contenedor mi_contenedor a la red mi_red. Ahora este contenedor podrá comunicarse con otros contenedores que también estén en la misma red.
docker network disconnect <nombrered> <nombrecontenedor>: Desconectar un contenedor de una red #
Este comando desconecta un contenedor de una red, lo que significa que el contenedor ya no podrá comunicarse con otros contenedores en esa red.
Ejemplo:
1docker network disconnect mi_red mi_contenedor
Esto desconecta el contenedor mi_contenedor de la red mi_red. Si el contenedor estaba utilizando esa red para comunicarse con otros servicios, ya no podrá hacerlo.
3. Resumen de los comandos #
docker network create: Crea una red personalizada para conectar contenedores.docker network ls: Lista todas las redes disponibles.docker network rm: Elimina una red personalizada que ya no necesitas.docker network inspect: Muestra detalles sobre una red, como los contenedores conectados y su configuración.docker network connect: Conecta un contenedor a una red.docker network disconnect: Desconecta un contenedor de una red.
Las redes en Docker son útiles para permitir que los contenedores se comuniquen entre sí de manera segura y eficiente. Con estos comandos, puedes gestionar redes, crear nuevas, conectar y desconectar contenedores, y obtener detalles sobre la configuración de las redes.
Resumen del tema
Conceptos clave #
- Drivers de Red en Docker:
bridge: red privada por defecto en un solo host; en redes bridge creadas por el usuario hay resolución DNS automática por nombre de contenedor.host: el contenedor comparte directamente la pila de red del host eliminando el aislamiento de puertos.none: aislamiento total sin interfaz de red externa.overlay: comunicación entre contenedores distribuidos en múltiples hosts (Docker Swarm).
- Comandos de Gestión de Redes:
docker network create,docker network ls,docker network inspect,docker network connectydocker network disconnect.
Qué debes recordar #
Crea redes bridge personalizadas (docker network create) para que tus contenedores se comuniquen entre sí utilizando sus nombres como nombres de dominio DNS internos.
Resumen de los comandos #
docker network create: Crea una red personalizada para conectar contenedores.docker network ls: Lista todas las redes disponibles.docker network rm: Elimina una red personalizada que ya no necesitas.docker network inspect: Muestra detalles sobre una red, como los contenedores conectados y su configuración.docker network connect: Conecta un contenedor a una red.docker network disconnect: Desconecta un contenedor de una red.