Hoy os voy a enseñar cómo comunicar dos docker-compose usando una red virtual docker.

Para comunicar dos contenedores Docker creados mediante dos archivos docker-compose.yml diferentes, es necesario utilizar una red de Docker. Una red de Docker es un medio de comunicación entre diferentes contenedores Docker que permite que los contenedores se comuniquen entre sí y con el host de Docker. En este tutorial, te guiaré a través del proceso de crear una red de Docker y configurar dos contenedores Docker para que se comuniquen entre sí.
Paso 1: Crear una red de Docker
Lo primero que hay que hacer es crear una red de Docker en la que los dos contenedores puedan comunicarse entre sí. Para ello, abra una terminal y ejecute el siguiente comando:
docker network create mynetwork
Este comando creará una nueva red de Docker llamada «mynetwork». Puedes elegir el nombre que desees para tu red.
Paso 2: Configurar los archivos docker-compose.yml
Una vez que se ha creado la red de Docker, es necesario configurar los archivos docker-compose.yml para que los contenedores utilicen la red creada anteriormente. Para ello, debemos añadir la sección de red en ambos archivos docker-compose.yml y especificar el nombre de la red que hemos creado en el paso anterior.
Por ejemplo, si tenemos dos archivos docker-compose.yml llamados docker-compose1.yml y docker-compose2.yml, podemos añadir la siguiente sección de red en ambos archivos:
networks:
mynetwork:
external:
name: mynetwork
La sección de redes debe añadirse en la misma sección donde se define cada contenedor. En este caso, estamos añadiendo la sección de red fuera de las secciones de servicios.
Paso 3: Iniciar los contenedores
Una vez que se han configurado los archivos docker-compose.yml, es hora de iniciar los contenedores. Para ello, abra una terminal y ejecute los siguientes comandos:
cd /ruta/al/archivo/docker-compose1.yml docker-compose up -d cd /ruta/al/archivo/docker-compose2.yml docker-compose up -d
Estos comandos iniciarán los contenedores definidos en los archivos docker-compose.yml. Los contenedores se iniciarán en segundo plano (-d) y estarán conectados a la red de Docker que hemos creado anteriormente.
Paso 4: Comprobar la comunicación entre los contenedores
Para comprobar que los contenedores están comunicándose correctamente, podemos utilizar el comando docker exec para acceder al shell de un contenedor y realizar una prueba de conexión con el otro contenedor.
Por ejemplo, si queremos comprobar que el contenedor definido en el archivo docker-compose1.yml se puede comunicar con el contenedor definido en el archivo docker-compose2.yml, podemos ejecutar los siguientes comandos:
docker exec -it <nombre-del-contenedor-en-docker-compose1> /bin/bash ping <nombre-del-contenedor-en-docker-compose2>
Esto debería producir una salida similar a la siguiente:
PING <nombre-del-contenedor-en-docker-compose2> (<dirección-IP-del-contenedor-en-docker-compose2>): 56 data bytes 64 bytes from <dirección-IP-del-contenedor-en-docker-compose2>: icmp_seq=0 ttl=64 time=0.138 ms 64 bytes from <dirección-IP-del-contenedor-en-docker-compose2>:
En este ejemplo comunicaremos MariaDB con PHPMyadmin en dos ficheros distintos:
Paso 1: Crear un archivo docker-compose1.yml para el contenedor MariaDB
version: '3.9'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
networks:
mynetwork:
aliases:
- mariadb
volumes:
db_data:
networks:
mynetwork:
driver: bridge
En este archivo, estamos definiendo un servicio llamado db, que utiliza la imagen mariadb. Hemos expuesto el puerto 3306 y asignado un volumen llamado db_data para persistir los datos de la base de datos.
Además, hemos definido una red llamada mynetwork y hemos agregado una sección de alias con el nombre de mariadb para identificar este contenedor.
Paso 2: Crear un archivo docker-compose2.yml para el contenedor de PhpMyAdmin
version: '3.9'
services:
phpmyadmin:
image: phpmyadmin
restart: always
environment:
PMA_HOST: db
PMA_PORT: 3306
MYSQL_ROOT_PASSWORD: mysecretpassword
ports:
- "8080:80"
networks:
mynetwork:
aliases:
- phpmyadmin
networks:
mynetwork:
external:
name: mynetwork
En este archivo, estamos definiendo un servicio llamado phpmyadmin, que utiliza la imagen phpmyadmin. Hemos especificado el host y el puerto de la base de datos en la sección de variables de entorno.
Además, hemos expuesto el puerto 80 para acceder a PhpMyAdmin en el navegador y hemos agregado una sección de alias con el nombre de phpmyadmin para identificar este contenedor.
Finalmente, hemos agregado la sección networks y especificado que estamos utilizando una red externa mynetwork definida previamente en el archivo docker-compose1.yml.
Paso 3: Iniciar los contenedores en la red de Docker
Ahora que hemos creado ambos archivos docker-compose.yml, podemos iniciar los contenedores en la red de Docker que hemos creado. Para ello, abrimos una terminal en la misma ruta donde se encuentran los archivos docker-compose.yml y ejecutamos el siguiente comando:
docker-compose -f docker-compose1.yml up -d docker-compose -f docker-compose2.yml up -d
Esto iniciará los contenedores de MariaDB y PhpMyAdmin y los conectará a la red mynetwork.
Paso 4: Comprobar la conexión
Finalmente, podemos comprobar si la conexión entre los contenedores de MariaDB y PhpMyAdmin funciona correctamente. Para ello, podemos abrir un navegador web y acceder a http://localhost:8080. Esto debería abrir PhpMyAdmin en el navegador y permitirnos acceder a la base de datos creada en el contenedor de MariaDB.

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.