Cómo configurar la red para contenedores Docker

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Docker se ha convertido en una tecnología ampliamente adoptada para contenerizar aplicaciones, pero administrar el aspecto de red de los contenedores Docker puede ser una tarea crucial pero compleja. Este tutorial lo guiará a través del proceso de configuración de la red para sus contenedores Docker, cubriendo los conceptos básicos de las redes Docker, la configuración de controladores de red (network drivers) y la conexión de contenedores a hosts.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-411517{{"Cómo configurar la red para contenedores Docker"}} docker/ps -.-> lab-411517{{"Cómo configurar la red para contenedores Docker"}} docker/create -.-> lab-411517{{"Cómo configurar la red para contenedores Docker"}} docker/network -.-> lab-411517{{"Cómo configurar la red para contenedores Docker"}} docker/build -.-> lab-411517{{"Cómo configurar la red para contenedores Docker"}} end

Conceptos básicos de redes Docker

Comprender las redes Docker

Docker proporciona varios tipos de controladores de red (network drivers) que le permiten configurar la red para sus contenedores. El controlador de red predeterminado es el controlador bridge, que crea un puente virtual en la máquina host y conecta cada contenedor a él. Esto permite que los contenedores se comuniquen entre sí y con la máquina host.

graph LR Host -- Network Bridge --> Container1 Host -- Network Bridge --> Container2 Container1 -- Network Bridge --> Container2

Además del controlador bridge, Docker también admite otros controladores de red como host, overlay, macvlan y none. Cada controlador tiene sus propios casos de uso y características, que exploraremos en la siguiente sección.

Tipos de controladores de red

  1. Bridge: El controlador de red predeterminado, que crea un puente virtual en la máquina host y conecta los contenedores a él.
  2. Host: Permite que un contenedor utilice directamente la pila de red (network stack) de la máquina host, omitiendo la red virtual.
  3. Overlay: Habilita la comunicación entre contenedores en múltiples hosts Docker, creando una red distribuida.
  4. Macvlan: Permite asignar una dirección MAC a los contenedores, haciéndolos parecer dispositivos físicos en la red.
  5. None: Deshabilita la red para un contenedor, dejándolo aislado de la red.

Cada controlador de red tiene sus propias ventajas y casos de uso. Por ejemplo, el controlador host es útil para aplicaciones sensibles al rendimiento, mientras que el controlador overlay es esencial para construir aplicaciones distribuidas en múltiples hosts.

graph LR Host -- Bridge --> Container1 Host -- Host --> Container2 Host1 -- Overlay --> Container3 Host2 -- Overlay --> Container4 Host -- Macvlan --> Container5 Host -- None --> Container6

Comprender los diferentes controladores de red y sus casos de uso es crucial para configurar la red en su entorno Docker.

Configuración de controladores de red

Configuración de la red Bridge

La red bridge es el controlador de red predeterminado en Docker. Para crear una nueva red bridge, puede utilizar el siguiente comando:

docker network create my-bridge-network

Luego, puede conectar un contenedor a la nueva red bridge utilizando la bandera --network:

docker run -d --name my-container --network my-bridge-network nginx

Los contenedores en la misma red bridge pueden comunicarse entre sí utilizando el nombre del contenedor o la dirección IP del contenedor.

Configuración de la red Host

Para utilizar el controlador de red host, puede iniciar un contenedor con la bandera --network host:

docker run -d --name my-host-container --network host nginx

Al utilizar la red host, el contenedor compartirá la pila de red (network stack) de la máquina host, lo que le permitirá acceder directamente a las interfaces de red y a los puertos de la máquina host.

Configuración de la red Overlay

Para crear una red overlay, primero debe inicializar un clúster Docker Swarm. Una vez que el Swarm esté configurado, puede crear una red overlay con el siguiente comando:

docker network create --driver overlay my-overlay-network

Luego, los contenedores se pueden conectar a la red overlay utilizando la bandera --network, al igual que con la red bridge.

docker run -d --name my-overlay-container --network my-overlay-network nginx

Las redes overlay permiten la comunicación entre contenedores en múltiples hosts Docker.

Configuración de la red Macvlan

Para utilizar el controlador de red macvlan, debe especificar la interfaz padre en la máquina host. Puede crear una nueva red macvlan con el siguiente comando:

docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network

Luego, los contenedores se pueden conectar a la red macvlan utilizando la bandera --network.

docker run -d --name my-macvlan-container --network my-macvlan-network nginx

Las redes Macvlan permiten que los contenedores tengan sus propias direcciones MAC, lo que los hace parecer dispositivos físicos en la red.

Al entender cómo configurar estos diferentes controladores de red, puede elegir la solución más adecuada para sus aplicaciones basadas en Docker.

Conectar contenedores y hosts

Exponer puertos de contenedores

Para permitir el acceso externo a un servicio que se ejecuta dentro de un contenedor, debe exponer el puerto del contenedor. Puede hacer esto utilizando la bandera -p o --publish al iniciar un contenedor:

docker run -d -p 80:80 --name my-web-server nginx

En el ejemplo anterior, el puerto 80 de la máquina host se asigna al puerto 80 dentro del contenedor. Esto permite que los clientes accedan al servidor web Nginx que se ejecuta en el contenedor.

Vincular contenedores

También puede conectar contenedores entre sí utilizando la bandera --link. Esto permite que un contenedor acceda a las variables de entorno y la información de red de otro contenedor.

docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx

En este ejemplo, el contenedor my-app-server puede acceder al contenedor my-db-server utilizando el alias db.

Usar Docker Compose

Docker Compose es una herramienta que simplifica el proceso de definir y ejecutar aplicaciones de múltiples contenedores. Puede utilizar Compose para definir la configuración de red y las relaciones entre contenedores en un archivo YAML.

Este es un ejemplo de archivo docker-compose.yml:

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"
    networks:
      - my-network
  db:
    image: mysql
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

En este ejemplo, los servicios web y db están conectados a la red bridge my-network, lo que les permite comunicarse entre sí.

Al entender cómo exponer puertos de contenedores, vincular contenedores y usar Docker Compose, puede conectar efectivamente sus contenedores y hosts para construir aplicaciones complejas y distribuidas.

Resumen

Al final de este tutorial, tendrá una comprensión integral de la red de Docker y podrá configurar efectivamente la configuración de red de sus contenedores. Aprenderá cómo aprovechar diferentes controladores de red (network drivers), conectar sus contenedores a los hosts y optimizar el rendimiento general de la red de sus aplicaciones basadas en Docker.