- Uso de contenedores aislados para gestionar versiones distintas de un mismo software sin conflictos.
- Implementación de redes virtuales para permitir la comunicación fluida entre servicios independientes.
- Orquestación mediante Docker Compose para simplificar el despliegue de arquitecturas multicontenedor.
¿Cómo ejecutar varias versiones de una misma aplicación usando Docker? A veces nos topamos con el marrón de necesitar varias versiones de un mismo lenguaje o aplicación en el mismo equipo, y ahí es donde Docker se convierte en nuestro mejor aliado. Imagina que tienes que mantener un proyecto antiguo en PHP 5.6 y otro moderno en PHP 8.2; intentar instalar todo eso directamente en el sistema host suele terminar en un caos de dependencias que te quitan el sueño. Si eres usuario de Windows, recuerda que puedes instalar Docker en Windows 10 para empezar a trabajar con estos entornos.
La magia de los contenedores reside en que crean un entorno estanco, permitiendo que cada versión viva en su propia burbuja sin molestar a las demás. En lugar de pelearse con los binarios del sistema o intentar hacer malabares con enlaces simbólicos en el directorio /bin de Linux, lo más sensato es encapsular cada versión en una imagen independiente para garantizar que todo funcione a la primera.
La estrategia de los contenedores independientes

Cuando hablamos de ejecutar aplicaciones con versiones distintas, la clave es no intentar que el host sea el que gestione los binarios. Si intentas enlazar un binario de un contenedor al sistema de archivos local, te vas a encontrar con que el contenedor no es una máquina virtual completa, sino un proceso aislado; por tanto, acceder a los binarios desde fuera no es la vía correcta. Para gestionar mejor estos procesos, puedes aprender a acceder a los archivos de un contenedor Docker de forma segura.
Esta metodología ofrece ventajas brutales. Primero, puedes actualizar una versión de forma aislada sin miedo a romper el resto de tus proyectos. Segundo, separas las responsabilidades: puedes tener un contenedor solo para la lógica de la aplicación y otro dedicado exclusivamente a la base de datos, lo que hace que la gestión de recursos sea mucho más eficiente que usar un administrador de procesos tradicional.
Conectando servicios mediante redes virtuales

Por defecto, Docker mantiene los contenedores en una especie de «isla», aislados del resto. Para que tu aplicación pueda hablar con su base de datos (por ejemplo, una instancia de MySQL), necesitas crear una red común. Esto se hace mediante el comando docker network create, lo que permite que los contenedores se reconozcan entre sí usando alias de red en lugar de direcciones IP que cambian constantemente.
Por ejemplo, si lanzas un contenedor de MySQL con el alias «mysql», cualquier otra aplicación conectada a esa misma red podrá encontrar la base de datos simplemente apuntando al host llamado mysql. Esto es fundamental para configurar las variables de entorno como MYSQL_HOST o MYSQL_USER, permitiendo que la conexión sea transparente y robusta independientemente de dónde se ejecuten los contenedores.
Simplificando el despliegue con Docker Compose

Si empezar a escribir comandos docker run larguísimos te parece una pesadilla, Docker Compose es la solución. Básicamente, es un archivo YAML donde defines toda tu infraestructura. En lugar de lanzar cada pieza a mano, describes los servicios, las imágenes que usan (como node:lts-alpine o mysql:lts) y los puertos que quieres exponer hacia tu máquina local.
En este archivo puedes configurar detalles críticos como el directorio de trabajo (working_dir) y los volúmenes. El uso de volúmenes relativos permite que el código de tu carpeta local se refleje en tiempo real dentro del contenedor, facilitando enormemente el desarrollo. Además, Compose gestiona automáticamente la creación de la red para que todos los servicios definidos en el archivo puedan comunicarse sin que tengas que hacer nada extra.
Gestión de datos y limpieza del entorno

Un punto donde mucha gente se hace un lío es la persistencia de los datos. Si borras un contenedor, los datos internos desaparecen. Para evitar esto, se utilizan los volúmenes nombrados, que guardan la información (como las tablas de MySQL) en un espacio gestionado por Docker que sobrevive al reinicio o borrado de los contenedores.
Cuando ya hayas terminado de trabajar o quieras hacer borrón y cuenta nueva, puedes usar docker-compose down. Si además quieres eliminar los datos almacenados para dejar el sistema limpio, deberás añadir la bandera –volumes. De esta forma, eliminas tanto los contenedores como las redes y los datos persistentes, dejando tu entorno listo para una nueva configuración sin residuos.
La implementación de arquitecturas basadas en contenedores permite manejar múltiples versiones de software eliminando las colisiones de dependencias y facilitando la comunicación entre servicios mediante redes virtuales y la automatización de Docker Compose, asegurando que cada entorno sea reproducible y fácil de mantener.
Apasionado de la tecnología desde pequeñito. Me encanta estar a la última en el sector y sobre todo, comunicarlo. Por eso me dedico a la comunicación en webs de tecnología y videojuegos desde hace ya muchos años. Podrás encontrarme escribiendo sobre Android, Windows, MacOS, iOS, Nintendo o cualquier otro tema relacionado que se te pase por la cabeza.