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, 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.