Saltar al contenido principal

Redes en Docker

Tipos de Redes en Docker

Docker proporciona varios tipos de redes predefinidas que se utilizan para conectar contenedores entre sí y con el mundo exterior. Los tipos de redes predefinidas en Docker incluyen:

$ docker network ls
NETWORK ID NAME DRIVER SCOPE
ec77cfd20583 bridge bridge local
69bb21378df5 host host local
089cc966eaeb none null local

Tipos de Redes Predefinidas

  1. Bridge (Puente)

    • Descripción: Es la red por defecto para los contenedores Docker. Los contenedores en esta red pueden comunicarse entre sí y exponer puertos al exterior.
    • Dirección IP por defecto: 172.17.0.0/16
    • Uso común: Aislar contenedores y permitir la comunicación entre ellos en un entorno local.

    Ejemplo de uso:

    Crear un contenedor interactivo usando la imagen debian en la red bridge:

    $ docker run -it --name contenedor1 --rm debian bash

    En otra pestaña, obtenemos la IP del contenedor:

    $ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' contenedor1
    172.17.0.2

    Verificar la configuración de la red bridge en el host:

    $ ip a
    ...
    5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:be:71:11:9e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
    valid_lft forever preferred_lft forever
    inet6 fe80::42:beff:fe71:119e/64 scope link
    valid_lft forever preferred_lft forever
    ...

    Verificar las reglas de iptables creadas por Docker:

    sudo iptables -L -n
    sudo iptables -L -n -t nat
  2. Host

    • Descripción: La red host elimina la capa de aislamiento entre el contenedor y el host. El contenedor utiliza la red del host y no tiene una IP propia.
    • Uso común: Cuando se necesita el máximo rendimiento de red y acceso directo a las interfaces del host.

    Ejemplo de uso:

    Ejecutar un contenedor en la red host:

    $ docker run -d --name mi_servidor --network host josedom24/aplicacionweb:v1

    Verificar los contenedores en ejecución:

    $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    135c742af1ff josedom24/aplicacionweb:v1 "/usr/sbin/apache2ct…" 3 seconds ago Up 2 seconds mi_servidor

    Acceder al puerto 80 del servidor desde el host para ver la página web directamente.

  3. None

    • Descripción: La red none desactiva la configuración de red para el contenedor. El contenedor no tiene IP y no puede acceder a redes externas ni comunicarse con otros contenedores.
    • Uso común: Ejecución de trabajos aislados que no necesitan comunicación de red.

    Ejemplo de uso:

    Ejecutar un contenedor con red none:

    $ docker run -it --name contenedor-aislado --network none alpine

Crear y Configurar Redes Personalizadas

Además de las redes predefinidas, Docker permite crear redes personalizadas con diferentes controladores. Esto es útil para aplicaciones que requieren redes específicas o que necesitan aislamiento adicional.

Crear una Red Personalizada

Para crear una red personalizada, usa el comando docker network create. Aquí hay un ejemplo de cómo crear una red bridge personalizada:

$ docker network create --driver bridge mi_red_personalizada

Conectar Contenedores a Redes Personalizadas

Para conectar contenedores a una red personalizada, usa la opción --network al ejecutar el contenedor. Por ejemplo:

$ docker run -d --name contenedor1 --network mi_red_personalizada nginx
$ docker run -d --name contenedor2 --network mi_red_personalizada alpine ping contenedor1

En este ejemplo, contenedor2 puede hacer ping a contenedor1 porque ambos están en la misma red personalizada mi_red_personalizada.

Ver Redes y Contenedores Conectados

Para listar todas las redes disponibles y ver los contenedores conectados a cada red:

$ docker network ls
$ docker network inspect mi_red_personalizada

Esto muestra detalles sobre la red, incluidos los contenedores conectados y la configuración de la red.

Consideraciones y Mejores Prácticas

  • Seguridad: Usa redes personalizadas para aislar aplicaciones y servicios en entornos de producción. Esto proporciona un nivel adicional de seguridad y control.
  • Rendimiento: La red host puede ofrecer un mejor rendimiento, pero ten en cuenta que el contenedor no estará aislado de la red del host.
  • Configuración de IP: Evita la configuración manual de IP en redes bridge personalizadas a menos que sea necesario, ya que Docker maneja la asignación de IP automáticamente.

Para obtener más información sobre redes en Docker, consulta la documentación oficial de Docker sobre redes.