Docker Networks
Docker: Networks
Tipos de Redes en Docker
Docker ofrece varios tipos de redes predefinidas, cada una con sus características y casos de uso.
1. Bridge (Por defecto)
- Es la red por defecto que Docker crea para los contenedores.
- Los contenedores en la misma red
bridgepueden comunicarse entre sí usando sus direcciones IP o nombres de contenedor. - Es útil para entornos aislados donde los contenedores necesitan comunicarse entre sí pero no directamente con el host.
Ejemplo de uso:
# Ejecutar dos contenedores en la red por defecto (bridge)
docker run -d --name contenedor1 busybox sleep 1000
docker run -d --name contenedor2 busybox sleep 1000
# Probar comunicación entre ellos
docker exec contenedor1 ping -c 2 contenedor2
- Nota: Docker asigna automáticamente direcciones IP en una subred virtual (por defecto, 172.17.0.0/16).
2. Host
- Usa la red del host directamente, lo que significa que el contenedor comparte la misma pila de red que el host.
- Ideal para aplicaciones que necesitan alto rendimiento en la red o requieren puertos privilegiados.
Ejemplo de uso:
# Ejecutar un contenedor usando la red del host
docker run --rm --network host -p 8080:8080 nginx
- Aquí, el contenedor usa directamente los puertos y configuración de red del host.
- Limitación: Los contenedores que usan la red
hostno están aislados del host.
3. None
- Desactiva toda conectividad de red para el contenedor.
- Útil para ejecutar contenedores que no necesitan conexión de red, como servicios batch o contenedores de pruebas.
Ejemplo de uso:
# Crear un contenedor sin red
docker run --rm --network none busybox ifconfig
4. Redes Personalizadas (Bridge Personalizado)
- Permite crear redes aisladas específicas para conectar contenedores según tus necesidades.
- Los contenedores pueden comunicarse entre ellos usando nombres de host, gracias al servicio DNS interno de Docker.
Ejemplo de uso:
# Crear una red personalizada
docker network create mi_red
# Ejecutar contenedores en esa red
docker run -d --name web --network mi_red nginx
docker run -d --name app --network mi_red busybox sleep 1000
# Verificar comunicación
docker exec app ping -c 2 web
Ventajas:
- Mayor control sobre la configuración de la red.
- Aislamiento entre aplicaciones.
Manejando Redes
Puedes inspeccionar las redes de Docker para entender cómo están configuradas:
docker network ls # Lista todas las redes
docker network inspect bridge # Inspecciona la red 'bridge'
Esto mostrará detalles como direcciones IP asignadas, contenedores conectados, etc.
Conexión de Contenedores a Varias Redes
Un contenedor puede estar conectado a varias redes para permitir diferentes niveles de comunicación.
Ejemplo:
# Crear dos redes
docker network create red1
docker network create red2
# Crear un contenedor en ambas redes
docker run -d --name multi_network --network red1 busybox sleep 1000
docker network connect red2 multi_network
# Verificar las redes
docker network inspect red1
docker network inspect red2
Redes y Docker Compose
Para configuraciones más complejas, puedes definir redes en un archivo docker-compose.yml.
Ejemplo de docker-compose.yml con redes:
version: "3.9"
services:
app:
image: nginx
networks:
- front
db:
image: mysql
networks:
- back
networks:
front:
driver: bridge
back:
driver: bridge
Comando para iniciar:
docker-compose up -d
Esto crea dos redes (front y back) y aísla los servicios según las redes asignadas.
Configuración Avanzada
-
Control de Subredes y Gateways: Puedes personalizar la configuración IP al crear redes.
docker network create \ --subnet=192.168.1.0/24 \ mi_red_personalizada -
Conectar Redes Docker a Redes Externas: Puedes conectar Docker con redes externas, como una red VPN.
-
Redes Overlay (Swarm): En entornos de orquestación como Docker Swarm, puedes usar redes overlay para conectar contenedores en diferentes nodos.