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.
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
- Bridge: El controlador de red predeterminado, que crea un puente virtual en la máquina host y conecta los contenedores a él.
- Host: Permite que un contenedor utilice directamente la pila de red (network stack) de la máquina host, omitiendo la red virtual.
- Overlay: Habilita la comunicación entre contenedores en múltiples hosts Docker, creando una red distribuida.
- Macvlan: Permite asignar una dirección MAC a los contenedores, haciéndolos parecer dispositivos físicos en la red.
- 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.



