Mira la lección en vídeo
Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.
Desbloquear Plan PlusRedes bridge/host/none
Docker proporciona tres tipos de red predefinidos que cubren los casos de uso más comunes para contenedores. Cada uno ofrece diferentes niveles de aislamiento y conectividad, permitiendo que los desarrolladores elijan la estrategia más adecuada para su aplicación.
Cuando ejecutamos un contenedor sin especificar red, Docker automáticamente lo conecta a la red bridge por defecto. Sin embargo, entender las diferencias entre los tipos disponibles es fundamental para tomar decisiones informadas sobre la arquitectura de red de nuestros contenedores.
Red Bridge (por defecto)
La red bridge es el tipo de red predeterminado en Docker y funciona como un switch virtual que conecta contenedores en el mismo host. Cuando instalamos Docker, automáticamente se crea una red bridge llamada bridge
que actúa como la red por defecto.
# Ver las redes disponibles
docker network ls
Esta red utiliza un rango de IPs privado (normalmente 172.17.0.0/16) y asigna automáticamente direcciones IP a los contenedores conectados. Los contenedores pueden comunicarse entre sí utilizando sus direcciones IP internas, pero requieren mapeo de puertos para ser accesibles desde el host.
# Ejecutar contenedor en la red bridge por defecto
docker run -d --name web-server -p 8080:80 nginx
# Verificar la IP asignada
docker inspect web-server --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
La principal limitación de la red bridge por defecto es que no proporciona resolución DNS automática por nombres de contenedor. Los contenedores deben comunicarse usando direcciones IP, lo que hace el código menos portable y más difícil de mantener.
Red Host
La red host elimina el aislamiento de red entre el contenedor y el host Docker. El contenedor comparte directamente el stack de red del sistema anfitrión, utilizando su interfaz de red, direcciones IP y puertos.
# Ejecutar contenedor usando la red del host
docker run -d --name nginx-host --network host nginx
Con la red host, el contenedor puede acceder directamente a todos los puertos y interfaces del host sin necesidad de mapeo de puertos. Esto ofrece el mejor rendimiento de red posible, ya que elimina la sobrecarga de la traducción de direcciones de red (NAT).
# El servicio nginx está disponible directamente en el puerto 80 del host
curl http://localhost:80
Sin embargo, esta configuración sacrifica aislamiento por rendimiento. Múltiples contenedores no pueden usar el mismo puerto simultáneamente, y los contenedores tienen acceso completo a la red del host, lo que puede representar riesgos de seguridad.
Red None
La red none proporciona aislamiento completo de red, deshabilitando toda conectividad de red para el contenedor. El contenedor solo tiene acceso a la interfaz loopback local (127.0.0.1).
# Ejecutar contenedor sin conectividad de red
docker run -d --name isolated-app --network none alpine sleep 3600
# Verificar que no hay conectividad
docker exec isolated-app ping google.com
# Este comando fallará por falta de conectividad
Esta configuración es útil para aplicaciones que procesan datos sensibles y no requieren conectividad de red, o para contenedores que realizan tareas de cálculo intensivo donde la red no es necesaria.
# Inspeccionar la configuración de red
docker inspect isolated-app --format='{{.NetworkSettings.Networks}}'
Comparación práctica de los tipos de red
Podemos observar las diferencias ejecutando contenedores con cada tipo de red:
Red bridge (por defecto):
docker run -d --name test-bridge nginx
docker inspect test-bridge --format='{{.NetworkSettings.IPAddress}}'
# Salida: 172.17.0.2 (ejemplo)
Red host:
docker run -d --name test-host --network host nginx
# El contenedor usa directamente la IP del host
Red none:
docker run -d --name test-none --network none alpine sleep 3600
docker exec test-none ip addr show
# Solo mostrará la interfaz loopback
Casos de uso recomendados
La red bridge es adecuada para aplicaciones web tradicionales que necesitan aislamiento pero requieren comunicación controlada con el exterior a través de mapeo de puertos.
La red host es ideal para aplicaciones que requieren máximo rendimiento de red o necesitan acceder a servicios específicos del host, como herramientas de monitorización o proxies de red.
La red none se reserva para contenedores que procesan datos confidenciales, realizan cálculos sin requerir red, o forman parte de arquitecturas de seguridad donde el aislamiento total es crítico.
Redes personalizadas y DNS
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Las redes personalizadas representan la evolución natural de las capacidades de red en Docker, superando las limitaciones de la red bridge por defecto. A diferencia de la red bridge predefinida, las redes personalizadas proporcionan resolución DNS automática entre contenedores, permitiendo que se comuniquen utilizando nombres de contenedor en lugar de direcciones IP.
Esta funcionalidad es fundamental en entornos de desarrollo y producción modernos, donde la flexibilidad y el mantenimiento del código son prioritarios. Las redes personalizadas se han convertido en el estándar de facto, representando aproximadamente el 70% de los casos de uso en desarrollo empresarial.
Creación de redes personalizadas
Docker permite crear redes bridge personalizadas que ofrecen mejor aislamiento y características avanzadas. El comando docker network create
es la herramienta principal para esta tarea.
# Crear una red bridge personalizada
docker network create mi-red-app
# Crear una red con configuración específica
docker network create --driver bridge --subnet=192.168.1.0/24 red-desarrollo
Al crear una red personalizada, Docker automáticamente configura un servidor DNS interno que permite la resolución de nombres entre contenedores conectados a la misma red.
# Verificar las redes disponibles
docker network ls
La salida mostrará nuestras redes personalizadas junto con las redes predefinidas del sistema:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
f6e5d4c3b2a1 mi-red-app bridge local
1234567890ab red-desarrollo bridge local
Conexión de contenedores a redes personalizadas
Los contenedores pueden conectarse a redes personalizadas durante su creación o posteriormente. Esta flexibilidad permite arquitecturas de red dinámicas y facilita el mantenimiento de aplicaciones complejas.
# Conectar contenedor durante la creación
docker run -d --name web-server --network mi-red-app nginx
# Crear otro contenedor en la misma red
docker run -d --name api-server --network mi-red-app python:3.11-alpine sleep 3600
Una vez conectados a la misma red personalizada, los contenedores pueden comunicarse directamente utilizando sus nombres:
# Probar conectividad entre contenedores por nombre
docker exec api-server ping web-server
# La resolución DNS funcionará automáticamente
Gestión avanzada de redes
Docker proporciona comandos para inspeccionar y gestionar redes de forma granular. El comando docker network inspect
revela información detallada sobre la configuración y contenedores conectados.
# Inspeccionar configuración de red
docker network inspect mi-red-app
Esta información incluye el rango de IP, gateway, contenedores conectados y sus direcciones asignadas:
[
{
"Name": "mi-red-app",
"Driver": "bridge",
"IPAM": {
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Containers": {
"web-server": {
"IPv4Address": "172.18.0.2/16"
}
}
}
]
Conexión y desconexión dinámica
Los contenedores pueden conectarse y desconectarse de redes mientras están en ejecución, proporcionando flexibilidad para cambios de configuración sin reiniciar servicios.
# Conectar contenedor existente a una red adicional
docker network connect red-desarrollo web-server
# Verificar las redes del contenedor
docker inspect web-server --format='{{range $net,$conf := .NetworkSettings.Networks}}{{$net}} {{end}}'
# Desconectar de una red específica
docker network disconnect mi-red-app web-server
Esta capacidad es especialmente útil para pruebas de conectividad y migración gradual de contenedores entre diferentes segmentos de red.
Resolución DNS y comunicación entre contenedores
La resolución DNS en redes personalizadas funciona de forma bidireccional y automática. Docker mantiene un registro DNS interno que se actualiza dinámicamente cuando los contenedores se conectan o desconectan.
# Crear una aplicación web que se comunica con una base de datos
docker run -d --name postgres-db --network mi-red-app \
-e POSTGRES_PASSWORD=password \
postgres:15
docker run -d --name web-app --network mi-red-app \
-p 8080:80 nginx
# El contenedor web-app puede conectarse a postgres-db por nombre
docker exec web-app nslookup postgres-db
La resolución DNS no requiere configuración adicional y funciona inmediatamente después de conectar los contenedores a la red personalizada.
Aislamiento entre redes
Las redes personalizadas proporcionan aislamiento completo entre diferentes segmentos. Los contenedores en redes distintas no pueden comunicarse directamente, mejorando la seguridad y organización de aplicaciones complejas.
# Crear redes separadas para diferentes entornos
docker network create red-produccion
docker network create red-staging
# Los contenedores en redes diferentes están aislados
docker run -d --name app-prod --network red-produccion nginx
docker run -d --name app-staging --network red-staging nginx
# app-prod no puede acceder directamente a app-staging
Publicación de puertos en redes personalizadas
La publicación de puertos funciona de forma idéntica en redes personalizadas, utilizando el flag -p
para exponer servicios al host o redes externas.
# Exponer servicio en red personalizada
docker run -d --name api-service --network mi-red-app \
-p 3000:3000 node:18-alpine
# El servicio está disponible desde el host en el puerto 3000
curl http://localhost:3000
Los puertos publicados permanecen accesibles desde el host independientemente de la red interna utilizada, manteniendo la compatibilidad con herramientas de desarrollo y proxies externos.
Limpieza y mantenimiento de redes
Docker permite eliminar redes que ya no se utilizan, liberando recursos del sistema y manteniendo un entorno limpio.
# Eliminar red específica (debe estar vacía)
docker network rm mi-red-app
# Eliminar todas las redes no utilizadas
docker network prune
# Listar redes con filtros
docker network ls --filter driver=bridge
Las redes solo pueden eliminarse cuando no tienen contenedores conectados, garantizando la integridad de las aplicaciones en ejecución.
Buenas prácticas para redes personalizadas
En entornos de desarrollo empresarial, es recomendable crear redes específicas para cada aplicación o conjunto de servicios relacionados. Esto facilita el debugging, mejora la seguridad y permite escalabilidad horizontal.
# Estrategia de nomenclatura clara
docker network create app-frontend
docker network create app-backend
docker network create app-database
# Conectar servicios a redes apropiadas
docker run -d --name nginx-proxy --network app-frontend -p 80:80 nginx
docker run -d --name api-server --network app-backend python:3.11
docker run -d --name postgres --network app-database postgres:15
# Conectar API tanto a backend como a database
docker network connect app-database api-server
Esta arquitectura proporciona separación de responsabilidades clara y facilita el mantenimiento de aplicaciones distribuidas complejas.
Aprendizajes de esta lección de Docker
- Comprender los tipos de red predefinidos en Docker: bridge, host y none.
- Aprender a crear y gestionar redes personalizadas con resolución DNS automática.
- Conocer cómo conectar y desconectar contenedores a redes dinámicamente.
- Entender las ventajas y limitaciones de cada tipo de red para diferentes casos de uso.
- Aplicar buenas prácticas para la organización y seguridad de redes en entornos Docker empresariales.
Completa este curso de Docker y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs