Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker network create mynetwork
docker network create mynetwork
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
networks:
mynetwork:
external:
name: mynetwork
networks: mynetwork: external: name: mynetwork
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd /ruta/al/archivo/docker-compose1.yml
docker-compose up -d
cd /ruta/al/archivo/docker-compose2.yml
docker-compose up -d
cd /ruta/al/archivo/docker-compose1.yml docker-compose up -d cd /ruta/al/archivo/docker-compose2.yml docker-compose up -d
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker exec -it <nombre-del-contenedor-en-docker-compose1> /bin/bash
ping <nombre-del-contenedor-en-docker-compose2>
docker exec -it <nombre-del-contenedor-en-docker-compose1> /bin/bash ping <nombre-del-contenedor-en-docker-compose2>
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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>:
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>:
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker-compose -f docker-compose1.yml up -d
docker-compose -f docker-compose2.yml up -d
docker-compose -f docker-compose1.yml up -d docker-compose -f docker-compose2.yml up -d
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.

0

Deja un comentario