Comunicar dos docker-compose.yml usando una red en común: ejemplo de comunicar MariaDB con PHPMyadmin

Tiempo de lectura: 3 minutos

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.

Deja un comentario