Redes en Docker: Qué son y cómo funcionan

redes-en-docker

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:

  1. 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.
    Ejemplo de creación automática:bashCopiar códigodocker run -d --name mi_contenedor nginx Este contenedor estará automáticamente conectado a la red bridge.
  2. 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.
    Ejemplo:bashCopiar códigodocker run --network host nginx Nota: Se pierde el aislamiento de red, pero es útil para ciertas aplicaciones como servidores DNS.
  3. None:
    • Desactiva la red.
    • Es como vivir en una isla sin carreteras ni Internet.
    • Útil para contenedores que no necesitan conectarse a ninguna red.
    Ejemplo:bashCopiar códigodocker run --network none nginx
  4. 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.
  5. 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

  1. Crea una red personalizada:bashCopiar códigodocker network create red_app
  2. Inicia un contenedor de MySQL conectado a esta red:bashCopiar códigodocker run -d --name mi_mysql --network red_app \ -e MYSQL_ROOT_PASSWORD=clave_secreta mysql:latest
  3. Inicia un contenedor de PHPMyAdmin en la misma red para gestionar la base de datos:bashCopiar códigodocker run -d --name mi_phpmyadmin --network red_app \ -e PMA_HOST=mi_mysql -p 8080:80 phpmyadmin/phpmyadmin
    • Aquí, PMA_HOST=mi_mysql indica que mi_phpmyadmin debe conectarse al contenedor mi_mysql usando el nombre del contenedor.
  4. 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:

  1. Inicia Docker Swarm:bashCopiar códigodocker swarm init
  2. Crea una red overlay:bashCopiar códigodocker network create -d overlay red_global
  3. 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.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *