Introducción
Docker es una plataforma potente para construir, desplegar y ejecutar aplicaciones en un entorno contenedorizado. Comprender cómo gestionar y probar la comunicación entre contenedores Docker es crucial para construir aplicaciones robustas y escalables. Este tutorial te guiará a través del proceso de creación de una red Docker personalizada y la prueba de la comunicación entre contenedores en la misma red.
Entendiendo las Redes Docker
Docker proporciona un sistema de networking integrado que permite a los contenedores comunicarse entre sí y con el mundo exterior. Docker admite varios tipos de redes, incluyendo:
Red Puente (Bridge Network)
El tipo de red predeterminado en Docker es la red puente. Cuando se inicia un nuevo contenedor, se conecta automáticamente a la red puente predeterminada a menos que se especifique una red diferente. Los contenedores en la misma red puente pueden comunicarse entre sí utilizando sus nombres de contenedor o direcciones IP.
graph LR
A[Host] -- Red Puente --> B[Contenedor 1]
A[Host] -- Red Puente --> C[Contenedor 2]
B[Contenedor 1] -- Red Puente --> C[Contenedor 2]
Red Anfitrión (Host Network)
La red anfitrión permite a un contenedor utilizar directamente la pila de red del host, evitando la red Docker. Esto puede ser útil para aplicaciones sensibles al rendimiento o cuando se necesita acceder a recursos de red específicos del host.
Red Overlay
La red overlay se utiliza para conectar varios demonios Docker entre sí, permitiendo que los servicios de un clúster Swarm se comuniquen entre ellos. Las redes overlay se utilizan típicamente en un entorno Docker Swarm.
Red Personalizada
Además de las redes predeterminadas, puedes crear tus propias redes personalizadas. Las redes personalizadas permiten aislar los contenedores entre sí y controlar cómo se comunican. Esto es útil para construir aplicaciones multicapa más complejas.
graph LR
A[Host] -- Red Personalizada --> B[Contenedor 1]
A[Host] -- Red Personalizada --> C[Contenedor 2]
B[Contenedor 1] -- Red Personalizada --> C[Contenedor 2]
Comprender las capacidades de networking de Docker es crucial para construir y gestionar aplicaciones contenedorizadas. En la siguiente sección, exploraremos cómo crear una red personalizada y probar la comunicación entre contenedores en esa red.
Creación de una Red Personalizada
Para crear una red personalizada en Docker, puedes usar el comando docker network create. Este comando te permite especificar el controlador de red, la subred y otras opciones de configuración.
Crear una Red Puente Personalizada
Vamos a crear una red puente personalizada llamada my-network:
docker network create my-network
Puedes verificar la creación de la red usando el comando docker network ls:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 my-network bridge local
Conectar Contenedores a la Red Personalizada
Ahora, vamos a iniciar dos contenedores y conectarlos a la red personalizada my-network:
## Iniciar contenedor 1
docker run -d --name container1 --network my-network ubuntu:22.04 sleep infinity
## Iniciar contenedor 2
docker run -d --name container2 --network my-network ubuntu:22.04 sleep infinity
Puedes inspeccionar la red y ver los contenedores conectados usando el comando docker network inspect:
[
{
"Name": "my-network",
"Id": "a1b2c3d4e5f6",
"Created": "2023-04-18T12:34:56.789Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"container1_id": {
"Name": "container1",
"EndpointID": "container1_endpoint_id",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"container2_id": {
"Name": "container2",
"EndpointID": "container2_endpoint_id",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Ahora que hemos creado una red personalizada y conectado contenedores a ella, podemos probar la comunicación entre los contenedores en la siguiente sección.
Pruebas de Comunicación entre Contenedores
Ahora que hemos creado una red personalizada y conectado contenedores a ella, podemos probar la comunicación entre los contenedores.
Ping entre Contenedores
Empecemos haciendo ping a un contenedor desde el otro:
## Entra en el primer contenedor
docker exec -it container1 bash
## Haz ping al segundo contenedor por su nombre
ping -c 4 container2
La salida debería mostrar que los contenedores pueden comunicarse entre sí usando sus nombres:
PING container2 (172.18.0.3) 56(84) bytes of data.
64 bytes from container2.my-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=4 ttl=64 time=0.057 ms
--- container2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.057/0.059/0.065/0.003 ms
Prueba de Comunicación TCP
También puedes probar la comunicación TCP entre los contenedores. Por ejemplo, puedes ejecutar un servidor HTTP simple en un contenedor y acceder a él desde el otro contenedor:
## Inicia un servidor HTTP simple en container1
docker exec -it container1 bash
python3 -m http.server 8000
## En otra terminal, accede al servidor HTTP desde container2
docker exec -it container2 bash
curl http://container1:8000
La salida en la segunda terminal debería mostrar el contenido del servidor HTTP que se ejecuta en el primer contenedor.
Al probar la comunicación entre contenedores en la misma red personalizada, puedes asegurarte de que los componentes de tu aplicación contenedorizada pueden interactuar correctamente entre sí, lo cual es esencial para construir y desplegar aplicaciones complejas y multiservicio.
Resumen
En este tutorial de Docker, aprenderás a crear una red personalizada, iniciar contenedores en esa red y verificar la comunicación entre ellos. Al final de esta guía, tendrás el conocimiento y las habilidades para probar la conectividad entre tus contenedores Docker, asegurando que tus aplicaciones puedan interactuar sin problemas entre sí dentro de la misma red personalizada.



