Compartir en Twitter
Go to Homepage

CÓMO USAR DOCKER PARA DESARROLLO DE APLICACIONES

October 24, 2025

Introducción a Docker para Desarrollo

Docker es una herramienta esencial para los desarrolladores, ya que permite crear, probar y desplegar aplicaciones en entornos consistentes y portátiles. Con Docker, puedes ejecutar aplicaciones en cualquier entorno sin preocuparte por configuraciones complejas o dependencias específicas del sistema operativo. Este tutorial te guiará a través de los tres casos de uso más comunes de Docker: ejecutar una base de datos localmente, realizar pruebas automatizadas con una base de datos en contenedores y desplegar aplicaciones tanto en entornos locales como en producción. Utilizaremos ejemplos prácticos para ilustrar cada caso, centrándonos en comandos de Docker que son aplicables a cualquier lenguaje de programación. Para seguir este tutorial, necesitarás tener instalado Docker en tu sistema.

Ejecutar una Base de Datos Localmente

Docker permite iniciar bases de datos en segundos sin instalar software adicional, manteniendo tu sistema local limpio de dependencias innecesarias. En este apartado, aprenderás cómo configurar una base de datos MySQL utilizando un contenedor Docker.

Para iniciar un contenedor MySQL, ejecuta el siguiente comando:

docker run --rm -v "$PWD/data":/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database -p 3306:3306 mysql:8.0.39-debian

Este comando utiliza varias opciones para configurar el contenedor:

  • --rm: Elimina el contenedor al detenerlo, evitando acumulación de contenedores innecesarios.
  • -v "$PWD/data":/var/lib/mysql: Mapea el directorio local ./data al directorio de datos de MySQL en el contenedor, asegurando que los datos persistan.
  • -e MYSQL_ROOT_PASSWORD=admin-password: Establece la contraseña del usuario root.
  • -e MYSQL_DATABASE=my-database: Crea una base de datos llamada my-database al iniciar el contenedor.
  • -p 3306:3306: Expone el puerto 3306 del contenedor al puerto 3306 del host, permitiendo conexiones externas.
  • mysql:8.0.39-debian: Especifica la imagen de MySQL a usar, actualizada a la versión 8.0.39 al momento de escribir este tutorial.

Puedes encontrar imágenes oficiales de bases de datos como MySQL, PostgreSQL o MongoDB en Docker Hub, donde se documentan las variables de entorno disponibles. Una vez que el contenedor esté en ejecución, puedes conectarte a la base de datos usando un cliente MySQL o herramientas como DBeaver, con las credenciales root y admin-password en localhost:3306.

Configurar una Aplicación con Docker

Para conectar una aplicación a una base de datos en Docker, puedes configurar cualquier aplicación que soporte conexiones a bases de datos relacionales. En este ejemplo, supondremos que tienes una aplicación que necesita conectarse a MySQL. Para ello, asegúrate de que el contenedor MySQL esté en ejecución (como se mostró anteriormente) y configura tu aplicación para conectarse a localhost:3306 con las credenciales root y admin-password.

Por ejemplo, si tu aplicación requiere una URL de conexión, puedes usar:

jdbc:mysql://localhost:3306/my-database

Con el contenedor MySQL en ejecución, inicia tu aplicación. Una vez que esté funcionando, puedes interactuar con ella, por ejemplo, enviando solicitudes HTTP para probar la conexión a la base de datos:

# Obtener todos los registros
curl http://localhost:8080/people

# Agregar una persona
curl -i -H "Content-Type:application/json" -d '{"firstName": "Ana", "lastName": "Gomez"}' http://localhost:8080/people

# Verificar que la persona se agregó
curl http://localhost:8080/people

Este proceso demuestra cómo una aplicación puede conectarse a una base de datos en Docker, proporcionando un entorno robusto y portátil para desarrollo.

Pruebas Automatizadas con Contenedores

Las pruebas automatizadas con una base de datos real son esenciales para garantizar que tu aplicación funcione correctamente en entornos similares a los de producción. Sin embargo, si detienes el contenedor MySQL, las pruebas fallarán porque la aplicación espera una base de datos activa. Para automatizar la creación de contenedores durante las pruebas, puedes usar herramientas que integren Docker en tu flujo de trabajo de pruebas.

En lugar de depender de configuraciones manuales, puedes iniciar un contenedor MySQL específicamente para pruebas con el mismo comando usado anteriormente:

docker run --rm -v "$PWD/data":/var/lib/mysql --name mysql-test -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database -p 3306:3306 mysql:8.0.39-debian

Configura tu entorno de pruebas para conectarse a esta base de datos usando la URL jdbc:mysql://localhost:3306/my-database y las credenciales correspondientes. Ejecuta las pruebas mientras el contenedor está en ejecución. Para automatizar este proceso, puedes incluir el comando Docker en tus scripts de pruebas, asegurándote de que el contenedor se inicie antes de las pruebas y se detenga después:

# Iniciar contenedor para pruebas
docker run -d --rm -v "$PWD/data":/var/lib/mysql --name mysql-test -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database -p 3306:3306 mysql:8.0.39-debian

# Ejecutar pruebas (reemplaza con tu comando de pruebas)
./run-tests.sh

# Detener contenedor
docker stop mysql-test

Este enfoque asegura que las pruebas usen una base de datos real en un entorno aislado, sin configuraciones manuales complejas.

Contenerizar tu Aplicación

Contenerizar una aplicación implica empaquetarla con sus dependencias en un contenedor Docker que pueda ejecutarse consistentemente en cualquier entorno. Aunque puedes crear imágenes Docker manualmente con un Dockerfile, este ejemplo usa un enfoque simplificado para ilustrar el proceso.

Supongamos que tienes una aplicación ya compilada (por ejemplo, un archivo JAR para una aplicación Java). Puedes crear un Dockerfile básico para contenerizarla:

FROM gcr.io/distroless/java17:nonroot
COPY my-app.jar /app.jar
CMD ["java", "-jar", "/app.jar"]

Construye la imagen Docker:

docker build -t my-docker-image .

Verifica que la imagen esté disponible:

docker images

Para ejecutar la aplicación, asegúrate de que el contenedor MySQL esté en ejecución:

docker run --rm -v "$PWD/data":/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database -p 3306:3306 mysql:8.0.39-debian

Luego, inicia la aplicación:

docker run --net=host my-docker-image

La opción --net=host permite que la aplicación se conecte directamente a la base de datos en localhost:3306. Alternativamente, crea una red Docker para conectar ambos contenedores:

docker network create my-network
docker run --rm -v "$PWD/data":/var/lib/mysql --name mysql --network my-network -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database mysql:8.0.39-debian
docker run --network my-network my-docker-image

En este caso, configura la aplicación para conectarse al contenedor MySQL usando su nombre (mysql) en lugar de localhost, por ejemplo:

jdbc:mysql://mysql:3306/my-database

Esta configuración permite que la aplicación y la base de datos se comuniquen dentro de la misma red Docker, ideal para entornos más complejos.

Desplegar en Producción

Una vez que tienes una imagen Docker de tu aplicación, puedes desplegarla en producción usando un registro de contenedores como Docker Hub. Para enviar la imagen, etiqueta y empuja la imagen al registro:

docker tag my-docker-image docker.io/usuario/my-docker-image:latest
docker push docker.io/usuario/my-docker-image:latest

En producción, utiliza herramientas de orquestación como Kubernetes o plataformas gestionadas como Amazon ECS. Por ejemplo, en Kubernetes, puedes definir un despliegue que conecte tu aplicación a un servicio de base de datos:

docker run --rm -v "$PWD/data":/var/lib/mysql --name mysql --network my-network -e MYSQL_ROOT_PASSWORD=admin-password -e MYSQL_DATABASE=my-database mysql:8.0.39-debian

Asegúrate de que la base de datos esté configurada en un servicio gestionado o en un contenedor separado dentro del clúster para garantizar alta disponibilidad.

Conclusiones

Docker simplifica el desarrollo, las pruebas y el despliegue de aplicaciones al proporcionar entornos aislados, portátiles y reproducibles. En este tutorial, aprendiste a ejecutar bases de datos en contenedores, realizar pruebas automatizadas con contenedores y contenerizar aplicaciones para entornos locales y de producción. Estos conocimientos te permiten crear flujos de trabajo eficientes, reduciendo problemas de configuración y mejorando la consistencia entre entornos. Al adoptar Docker, puedes centrarte en desarrollar aplicaciones en lugar de gestionar dependencias, lo que aumenta la productividad y la escalabilidad de tus proyectos.