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 bridge pueden 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 host no 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

  1. 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
  2. Conectar Redes Docker a Redes Externas: Puedes conectar Docker con redes externas, como una red VPN.

  3. Redes Overlay (Swarm): En entornos de orquestación como Docker Swarm, puedes usar redes overlay para conectar contenedores en diferentes nodos.