Las redes en Docker permiten que los contenedores se comuniquen entre sí, con el host, y con el mundo exterior. Es como configurar un sistema de comunicación eficiente entre diferentes máquinas, pero dentro del ecosistema de Docker.
Para entender cómo funcionan, vamos a usar analogías simples y desglosar cada componente.
¿Qué es una red en Docker?
Imagina un vecindario donde las casas (contenedores) necesitan conectarse a Internet (mundo exterior) y comunicarse entre ellas (red interna). Docker crea estas «calles» de comunicación automáticamente, pero también te da control sobre cómo se conectan y cómo se aíslan las casas.
En términos técnicos:
- Docker gestiona redes virtuales para permitir que los contenedores interactúen entre sí y con el host.
- Puedes usar redes predeterminadas o crear configuraciones personalizadas según tus necesidades.
Tipos de redes en Docker
Docker ofrece varios tipos de redes, cada una con un propósito específico:
- Bridge (Puente):
- Es el tipo de red predeterminada para los contenedores.
- Imagina una calle privada donde solo las casas dentro de ese vecindario pueden comunicarse.
- Los contenedores conectados a la misma red
bridge
pueden hablar entre ellos, pero están aislados del resto.
docker run -d --name mi_contenedor nginx
Este contenedor estará automáticamente conectado a la redbridge
. - Host:
- Comparte la red del host directamente.
- Es como quitar las paredes de tu casa y vivir directamente en el vecindario (el host).
- El contenedor usa la misma dirección IP que el host.
docker run --network host nginx
Nota: Se pierde el aislamiento de red, pero es útil para ciertas aplicaciones como servidores DNS. - None:
- Desactiva la red.
- Es como vivir en una isla sin carreteras ni Internet.
- Útil para contenedores que no necesitan conectarse a ninguna red.
docker run --network none nginx
- Overlay:
- Permite conectar contenedores en diferentes hosts dentro de un clúster de Docker Swarm.
- Es como crear un túnel que conecta vecindarios separados físicamente.
- Requiere configurar Docker Swarm.
- Macvlan:
- Da a cada contenedor su propia dirección MAC, haciéndolos parecer dispositivos físicos en la red del host.
- Útil si necesitas que el contenedor actúe como una máquina física en la red.
Gestión de redes en Docker
1. Listar redes existentes
Para ver todas las redes disponibles:
bashCopiar códigodocker network ls
Ejemplo de salida:
sqlCopiar códigoNETWORK ID NAME DRIVER SCOPE
d1a1a1a1a1a1 bridge bridge local
e2b2b2b2b2b2 host host local
f3c3c3c3c3c3 none null local
2. Crear una red personalizada
Puedes crear una red con el controlador bridge
para agrupar contenedores.
bashCopiar códigodocker network create mi_red
Esto es como construir una nueva calle para que solo las casas dentro de ella se comuniquen.
3. Conectar un contenedor a una red
Al crear un contenedor, especifica la red:
bashCopiar códigodocker run -d --name mi_contenedor --network mi_red nginx
También puedes conectar un contenedor existente a otra red:
bashCopiar códigodocker network connect mi_red mi_contenedor
4. Desconectar un contenedor de una red
Si necesitas aislar un contenedor de una red:
bashCopiar códigodocker network disconnect mi_red mi_contenedor
5. Eliminar una red
Puedes eliminar una red personalizada si no está en uso:
bashCopiar códigodocker network rm mi_red
Ejemplo práctico: Comunicación entre contenedores
- Crea una red personalizada:bashCopiar código
docker network create red_app
- Inicia un contenedor de MySQL conectado a esta red:bashCopiar código
docker run -d --name mi_mysql --network red_app \ -e MYSQL_ROOT_PASSWORD=clave_secreta mysql:latest
- Inicia un contenedor de PHPMyAdmin en la misma red para gestionar la base de datos:bashCopiar código
docker run -d --name mi_phpmyadmin --network red_app \ -e PMA_HOST=mi_mysql -p 8080:80 phpmyadmin/phpmyadmin
- Aquí,
PMA_HOST=mi_mysql
indica quemi_phpmyadmin
debe conectarse al contenedormi_mysql
usando el nombre del contenedor.
- Aquí,
- Abre tu navegador en
http://localhost:8080
y gestiona la base de datos MySQL.
Configuración avanzada: Redes Overlay
Si trabajas en un entorno distribuido con múltiples hosts:
- Inicia Docker Swarm:bashCopiar código
docker swarm init
- Crea una red overlay:bashCopiar código
docker network create -d overlay red_global
- Usa esta red para conectar contenedores en diferentes nodos del clúster.
Resumen
- Bridge: Aislamiento por defecto, contenedores en la misma red pueden comunicarse.
- Host: Acceso directo a la red del host.
- None: Contenedor completamente aislado de la red.
- Overlay: Comunicación entre hosts en un clúster.
- Macvlan: Contenedor como dispositivo físico en la red.