Cómo gestionar el tráfico de red entre contenedores de 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 ha revolucionado la forma en que construimos, desplegamos y gestionamos aplicaciones. Como parte de este proceso, comprender y gestionar el tráfico de red entre los contenedores de Docker es fundamental para garantizar la confiabilidad, escalabilidad y seguridad de la infraestructura de su aplicación. Este tutorial lo guiará a través de los conceptos esenciales de la red de Docker, le proporcionará pasos prácticos para conectar sus contenedores y explorará estrategias para gestionar eficazmente el tráfico de red entre ellos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/start -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} docker/stop -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} docker/attach -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} docker/exec -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} docker/create -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} docker/network -.-> lab-411569{{"Cómo gestionar el tráfico de red entre contenedores de Docker"}} end

Comprender la red de Docker

Docker es una plataforma de contenedores que permite a los desarrolladores empaquetar sus aplicaciones y dependencias en contenedores aislados. Estos contenedores se pueden desplegar, escalar y gestionar fácilmente en diferentes entornos. Uno de los aspectos clave de Docker son sus capacidades de red, que permiten la comunicación entre los contenedores y el mundo exterior.

Conceptos básicos de la red de Docker

Docker proporciona varios controladores de red (networking drivers) que permiten a los contenedores comunicarse entre sí y con el sistema host. El controlador de red predeterminado es bridge, que crea un puente virtual en el sistema host y asigna direcciones IP a los contenedores. Los contenedores conectados a la misma red de puente pueden comunicarse entre sí utilizando sus direcciones IP o nombres de contenedor.

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

Otros controladores de red incluyen host, overlay y macvlan, cada uno con sus propios casos de uso y configuraciones.

Comandos de red de Docker

Puedes gestionar las redes de Docker utilizando los siguientes comandos:

Comando Descripción
docker network create Crear una nueva red
docker network ls Listar todas las redes
docker network inspect Inspeccionar una red
docker network connect Conectar un contenedor a una red
docker network disconnect Desconectar un contenedor de una red

Por ejemplo, para crear una nueva red de puente y conectar un contenedor a ella:

## Create a new bridge network
docker network create my-network

## Connect a container to the network
docker run -d --name my-container --network my-network nginx

Comprender los conceptos básicos de la red de Docker es fundamental para gestionar el tráfico de red entre los contenedores y garantizar una comunicación segura dentro de sus aplicaciones basadas en Docker.

Conectando contenedores de Docker

Después de comprender los conceptos básicos de la red de Docker, exploremos cómo conectar contenedores de Docker.

Conectando contenedores en la misma red

La forma más sencilla de conectar contenedores de Docker es colocándolos en la misma red. Cuando los contenedores están en la misma red, pueden comunicarse entre sí utilizando sus nombres de contenedor o direcciones IP.

graph LR Container1 -- Communicate --> Container2 Container1 -- Communicate --> Container3 Container2 -- Communicate --> Container3

Para conectar contenedores en la misma red, puede utilizar la bandera --network al iniciar un nuevo contenedor:

## Create a new bridge network
docker network create my-network

## Start a container and connect it to the network
docker run -d --name container1 --network my-network nginx

## Start another container and connect it to the same network
docker run -d --name container2 --network my-network nginx

Ahora, los dos contenedores pueden comunicarse entre sí utilizando sus nombres de contenedor (por ejemplo, container1, container2) o direcciones IP.

Conectando contenedores entre redes

En algunos casos, es posible que necesite conectar contenedores entre diferentes redes. Esto se puede lograr utilizando la bandera --link o creando una superposición de red (network overlay).

Utilizando la bandera --link:

## Create two networks
docker network create network1
docker network create network2

## Start a container in network1
docker run -d --name container1 --network network1 nginx

## Start a container in network2 and link it to container1
docker run -d --name container2 --network network2 --link container1 nginx

Ahora, container2 puede acceder a container1 utilizando el nombre de host container1.

Conectando contenedores entre redes utilizando una superposición de red:

## Create an overlay network
docker network create --driver overlay my-overlay-network

## Start a container in the overlay network
docker run -d --name container1 --network my-overlay-network nginx

## Start another container in the same overlay network
docker run -d --name container2 --network my-overlay-network nginx

Los contenedores conectados a la misma superposición de red pueden comunicarse directamente entre sí, incluso si se encuentran en diferentes hosts de Docker.

Comprender cómo conectar contenedores de Docker en la misma red o entre diferentes redes es esencial para gestionar el tráfico de red y permitir la comunicación entre sus aplicaciones contenerizadas.

Gestionar el tráfico de red entre contenedores

Ahora que comprende cómo conectar contenedores de Docker, exploremos formas de gestionar el tráfico de red entre ellos.

Exponer puertos

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

## Expose port 80 of the container to port 8080 on the host
docker run -d --name my-web-app -p 8080:80 nginx

Ahora, puede acceder al servidor web Nginx que se ejecuta en el contenedor visitando http://localhost:8080 en el sistema host.

Equilibrio de carga (Load Balancing)

Cuando tiene múltiples instancias de la misma aplicación contenerizada, puede utilizar el equilibrio de carga para distribuir el tráfico de red entre los contenedores. Esto se puede lograr utilizando un servicio de equilibrio de carga, como Nginx o HAProxy, que se ejecuta en el sistema host.

graph LR Host -- Load Balancer --> Container1 Host -- Load Balancer --> Container2 Host -- Load Balancer --> Container3

Políticas de red

Docker admite políticas de red que le permiten controlar el tráfico de red entre contenedores. Puede utilizar políticas de red para restringir o permitir la comunicación entre contenedores específicos o grupos de contenedores.

Por ejemplo, para crear una política de red que permita solo a ciertos contenedores acceder a un contenedor de base de datos:

## Create a network policy
docker network create --driver=bridge --subnet=172.18.0.0/16 my-network
docker network policy create --ingress --allow-from-container=web-app my-network database

En este ejemplo, se permite que el contenedor web-app acceda al contenedor database, mientras que otros contenedores en la red my-network no pueden.

Descubrimiento de servicios (Service Discovery)

Cuando tiene múltiples contenedores que necesitan comunicarse entre sí, puede utilizar el descubrimiento de servicios para simplificar el proceso. El descubrimiento de servicios permite que los contenedores encuentren y se conecten a otros servicios por nombre, en lugar de depender de direcciones IP o nombres de contenedor.

Una forma de implementar el descubrimiento de servicios es utilizando un registro de servicios, como Consul o Zookeeper, que se puede integrar con su entorno Docker.

Gestionar el tráfico de red entre contenedores de Docker es fundamental para garantizar una comunicación segura y eficiente dentro de sus aplicaciones contenerizadas. Al comprender conceptos como la exposición de puertos, el equilibrio de carga, las políticas de red y el descubrimiento de servicios, puede controlar y optimizar de manera efectiva el tráfico de red en su infraestructura basada en Docker.

Resumen

En este tutorial completo, aprenderá cómo dominar el arte de gestionar el tráfico de red entre contenedores de Docker. Al comprender los conceptos básicos de la red de Docker, conectar sus contenedores sin problemas e implementar técnicas eficaces de gestión de tráfico, podrá optimizar el rendimiento y la confiabilidad de sus aplicaciones basadas en Docker. Ya sea que sea un usuario experimentado de Docker o esté comenzando su viaje en la contenerización, esta guía le proporcionará el conocimiento y las habilidades necesarias para llevar su red de Docker al siguiente nivel.