Hasta ahora hemos trabajado con contenedores de forma aislada, pero las aplicaciones reales casi nunca viven solas: un servidor web necesita hablar con una base de datos, una API debe conectarse a una caché, y así sucesivamente. Para que los contenedores se comuniquen entre sí (y con el exterior) entra en juego el sistema de redes de Docker. En esta lección introductoria entenderás qué es una red en Docker, conocerás los tipos básicos disponibles, aprenderás los comandos esenciales para gestionarlas y verás un ejemplo sencillo de dos contenedores comunicándose. No te preocupes por los detalles más avanzados: aquí construiremos la base que necesitas para empezar.
¿Qué es una Red en Docker?
Cuando ejecutas un contenedor, Docker le asigna automáticamente una conexión de red, igual que un ordenador conectado a tu router recibe una dirección. Una red de Docker es un espacio virtual que permite a los contenedores:
- Comunicarse entre sí (por ejemplo, que una API hable con su base de datos).
- Comunicarse con el host (tu máquina).
- Comunicarse con Internet o quedar aislados, según convenga.
Lo importante de partida es entender que Docker gestiona estas redes por ti de forma transparente. Cada contenedor obtiene su propia dirección IP dentro de una red, y Docker se encarga del enrutamiento.
Tipos Básicos de Red
Docker ofrece varios tipos de red (controlados por drivers). A nivel introductorio, basta con conocer los tres más importantes.
| Tipo | Descripción | Cuándo usarlo |
|---|---|---|
| bridge | Red privada interna; es la opción por defecto | Comunicación entre contenedores en un host |
| host | El contenedor comparte directamente la red del host | Cuando necesitas máximo rendimiento de red |
| none | El contenedor no tiene red (queda totalmente aislado) | Procesos que no necesitan conectividad |
La red bridge
Es la red por defecto. Cuando lanzas un contenedor sin indicar nada, se conecta a una red de tipo bridge. Docker crea un puente virtual en el host, y los contenedores conectados reciben una IP privada para comunicarse entre ellos.
Esta es la red que usarás en la mayoría de los casos cuando empieces.
La red host
Con este tipo, el contenedor no tiene una red propia: utiliza directamente la red de tu máquina. Si un servidor escucha en el puerto 80 dentro del contenedor, lo hará en el puerto 80 del host sin necesidad de -p.
--network host: el contenedor usa la red del host directamente.- Ofrece más rendimiento, pero pierde el aislamiento.
La red none
Desactiva por completo la conectividad del contenedor. Solo tendrá su interfaz interna (loopback). Es útil para tareas que no necesitan red.
--network none: el contenedor queda aislado, sin acceso a red.
Gestionar Redes con Comandos
Docker proporciona un conjunto de comandos sencillos para trabajar con redes.
Listar las redes existentes
- Muestra todas las redes disponibles. Verás que Docker ya trae creadas por defecto
bridge,hostynone.
Crear una red propia
docker network create: crea una nueva red.mi_red: el nombre que le damos.- Por defecto, será una red de tipo bridge gestionada por el usuario.
Crear tus propias redes tiene una gran ventaja para principiantes: dentro de una red creada por ti, los contenedores pueden encontrarse por su nombre, sin necesidad de conocer sus direcciones IP. Esto simplifica enormemente la comunicación.
Conectar un contenedor a una red
docker network connect: conecta un contenedor ya existente a una red.mi_red: la red de destino.servidor_web: el contenedor que queremos conectar.
También puedes indicar la red directamente al crear el contenedor con --network:
--network mi_red: el contenedor nace ya conectado a la redmi_red.
Otros comandos útiles
# Ver los detalles de una red (contenedores conectados, IPs...)
docker network inspect mi_red
# Desconectar un contenedor de una red
docker network disconnect mi_red servidor_web
# Eliminar una red que ya no se usa
docker network rm mi_reddocker network inspect: muestra la configuración de la red y qué contenedores están conectados.docker network rm: elimina una red (siempre que no tenga contenedores conectados).
Ejemplo Práctico: Dos Contenedores que se Comunican
Veamos el caso más típico para un principiante: hacer que dos contenedores se "vean" entre sí. Usaremos una red propia para poder referirnos a ellos por nombre.
Paso 1: crear una red
- Creamos una red llamada
red_demodonde conectaremos ambos contenedores.
Paso 2: lanzar el primer contenedor
- Lanzamos un servidor Nginx llamado
servidor, conectado ared_demo.
Paso 3: lanzar el segundo contenedor y probar la comunicación
- Lanzamos un contenedor Alpine interactivo, también en
red_demo. --rm: se eliminará al salir.
Ya dentro del contenedor Alpine, comprobamos que podemos alcanzar al servidor por su nombre:
ping servidor: Docker traduce el nombreservidora su IP interna automáticamente, porque ambos contenedores están en la misma red creada por el usuario.- Si recibes respuesta, ¡los contenedores se comunican correctamente!
Este sencillo mecanismo (referirse a otro contenedor por su nombre dentro de una red propia) es la base de cómo se conectan los servicios en aplicaciones más complejas.
Errores Comunes y Consejos
- Esperar comunicación por nombre en la red por defecto: en la red
bridgepor defecto, los contenedores NO se encuentran por nombre, solo por IP. Crea tu propia red para usar nombres. - Olvidar conectar ambos contenedores a la misma red: para que dos contenedores se comuniquen, deben compartir red.
- Confundir red con publicación de puertos: las redes conectan contenedores entre sí; el flag
-pexpone un puerto hacia el host. Son cosas distintas. - Intentar eliminar una red en uso:
docker network rmfalla si quedan contenedores conectados. Desconéctalos primero. - Creer que
localhostdentro del contenedor es el host: dentro de un contenedor,localhostse refiere a sí mismo, no a tu máquina. - Consejo: ponle nombres descriptivos a tus redes (
red_app,red_backend) para entender de un vistazo qué conecta cada una.
Ejercicios
Ejercicio 1: explorar las redes por defecto
Lista las redes que Docker trae creadas por defecto e identifica las tres básicas (bridge, host y none).
Ejercicio 2: comunicación por nombre
Crea una red propia, lanza dos contenedores en ella (uno Nginx y uno Alpine) y comprueba desde el Alpine que puedes hacer ping al Nginx usando su nombre.
Ejercicio 3: limpiar una red
Crea una red, lanza un contenedor en ella, luego desconéctalo y elimina la red.
Soluciones
Solución 1
En la salida verás, entre otras, las redes bridge, host y none, que son las que Docker crea automáticamente.
Solución 2
docker network create red_practica
docker run -d --name web --network red_practica nginx
docker run -it --rm --network red_practica alpine sh
# Dentro del contenedor Alpine:
ping webping web funciona porque ambos contenedores comparten la red red_practica, donde Docker resuelve los nombres automáticamente.
Solución 3
docker network create red_temporal
docker run -d --name temporal --network red_temporal nginx
docker network disconnect red_temporal temporal
docker network rm red_temporalPrimero desconectamos el contenedor de la red y luego ya podemos eliminarla sin error.
Conclusión
En esta lección introductoria hemos descubierto el sistema de redes de Docker: qué es una red, los tres tipos básicos (bridge, host y none), los comandos esenciales para listarlas, crearlas, conectarlas y eliminarlas, y hemos visto un ejemplo práctico de dos contenedores comunicándose por nombre dentro de una red propia. Con esta base ya puedes conectar tus primeros servicios. Más adelante, en el Módulo 5, profundizaremos en los drivers avanzados, la resolución DNS interna y los patrones de aislamiento.
En la siguiente lección, Persistencia de Datos con Volúmenes, abordaremos otro pilar fundamental: cómo conseguir que los datos de tus contenedores no se pierdan cuando estos se eliminan.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga
