Nota: Traducido de la versión original en Inglés.
Docker permite crear entornos aislados, no solo en producción. Ha cambiado la forma en que se configuran los entornos de desarrollo, especialmente para equipos que trabajan en distintos sistemas operativos. Elimina el problema de “solo funciona en mi máquina” creando entornos consistentes en todas las máquinas. Muchos equipos usan Docker para configurar entornos de desarrollo completos que incluyen todos los servicios requeridos por una aplicación, y a veces hasta un IDE basado en la web. Esto es exactamente lo que vamos a hacer en este artículo.
El archivo Docker Compose#
Necesitarás Docker instalado en tu ordenador. Si aún no lo has hecho, por favor sigue las instrucciones de instalación en https://docs.docker.com/engine/install. Para verificar la instalación exitosa, puedes ejecutar docker –version en tu terminal, lo que debería devolver la versión instalada de Docker.
Nuestra configuración se define en un archivo docker-compose.yml que establece tres servicios, cada uno corriendo en su propio contenedor. Aquí está el archivo completo:
version: '3.8'
services:
mariadb:
image: mariadb:latest
environment:
MARIADB_ROOT_PASSWORD: RootPassword123!
MARIADB_DATABASE: demo
MARIADB_USER: user
MARIADB_PASSWORD: Password123!
ports:
- "3306:3306"
volumes:
- ./mariadb_data:/var/lib/mysql
restart: always
code-server:
image: codercom/code-server:latest
ports:
- "8080:8080"
environment:
- PASSWORD=CodePassword123!
volumes:
- ./workspace:/home/coder/project
- ./install-extensions.sh:/install-extensions.sh
entrypoint: ["/bin/bash", "/install-extensions.sh"]
restart: always
db-gate:
image: dbgate/dbgate:latest
environment:
CONNECTIONS: con1
LABEL_con1: MariaDB
SERVER_con1: dockerhost
USER_con1: root
PASSWORD_con1: RootPassword123!
PORT_con1: 3306
ENGINE_con1: mysql@dbgate-plugin-mysql
ports:
- "3000:3000"
restart: always
El archivo anterior define los siguientes servicios:
Servicio MariaDB (mariadb): Este servicio ejecuta el servidor de base de datos MariaDB. Incluye variables de entorno para la contraseña de root, nombre de la base de datos y credenciales de un nuevo usuario para aplicaciones (no uses root en tus aplicaciones). El mapeo de puertos asegura que la base de datos sea accesible en el puerto 3306 fuera del entorno Docker. La directiva de volúmenes garantiza la persistencia de datos en el directorio ./mariadb_data en tu máquina local.
Servicio Code-Server (code-server): Ejecuta una versión web de Visual Studio ( code-server), accesible a través de un navegador en el puerto 8080. Está asegurado con una contraseña y monta dos ubicaciones en tu máquina local: tu espacio de trabajo (./workspace) y un script para instalar extensiones adicionales del IDE (./install-extensions.sh).
Servicio DbGate (db-gate): DbGate es un cliente de base de datos versátil basado en la web que te permite interactuar con tu base de datos a través de una interfaz gráfica en tu navegador. Está preconfigurado para conectarse a tu servidor MariaDB.
Personalizando el IDE#
El siguiente script install-extensions.sh instala automáticamente extensiones para Java, Python, Node.js y un cliente SQL adicional para ejecutar consultas dentro del IDE:
#!/bin/bash
code-server --install-extension vscjava.vscode-java-pack
code-server --install-extension ms-python.python
code-server --install-extension cweijan.vscode-database-client2
# Iniciar code-server normalmente después de instalar las extension
exec /usr/bin/entrypoint.sh --bind-addr 0.0.0.0:8080 . "$@"
Modifica este script para incluir o eliminar cualquier extensión según los requisitos de tu proyecto.
Ejecutando los contenedores#
Para iniciar los servicios, abre un terminal y navega al directorio que contiene tus archivos docker-compose.yml y install-extensions.sh y ejecuta:
docker compose up -d
Este comando descarga las imágenes Docker necesarias e inicia los contenedores como se define en tu archivo Docker Compose. La bandera -d
ejecuta los contenedores en modo desasociado, permitiéndoles correr en segundo plano.
Después de ejecutar el comando, puedes verificar el progreso revisando los logs:
docker logs <container_name>
Reemplaza <container_name>
con el nombre del contenedor.
¡Ten paciencia! La primera vez que ejecutes esto, Docker tiene que descargar las imágenes para crear los contenedores así como las extensiones de Visual Studio Code. Revisa los logs para ver el progreso.
Accediendo al IDE#
Después de que los servicios estén en funcionamiento y las extensiones estén instaladas, navega a http://localhost:8080 en tu navegador web. Ingresa la contraseña definida en tu archivo Docker Compose (en nuestro caso, CodePassword123!
) para acceder al IDE.
Accediendo al cliente de base de datos#
Puedes acceder al cliente de base de datos DbGate navegando a http://localhost:3000 en tu navegador web. El servicio está preconfigurado para conectarse a tu servidor MariaDB, por lo que puedes comenzar a interactuar con tu base de datos de inmediato.
Alternativamente, puedes usar la extensión Database Client para Visual Studio Code dentro del IDE, en cuyo caso, debes usar mariadb como Host.
Consideraciones importantes#
Adoptar un entorno de desarrollo basado en Docker trae beneficios, especialmente en garantizar la consistencia entre las máquinas de los miembros del equipo. Esta aproximación aborda eficazmente el problema de “solo funciona en mi máquina” al proporcionar entornos aislados y replicables para cada servicio. Tal aislamiento minimiza los problemas de dependencia, y la facilidad para configurar y desmontar estos entornos ahorra tiempo y esfuerzo considerable.
Sin embargo, hay consideraciones a tener en cuenta. Docker, aunque eficiente, conlleva una curva de aprendizaje, especialmente para aquellos nuevos en la contenerización. Además, ejecutar múltiples servicios simultáneamente puede ser intensivo en recursos, lo que podría ser un desafío para máquinas menos potentes. La complejidad también aumenta para escenarios de desarrollo avanzados que requieren un conocimiento más profundo de las redes, volúmenes y configuraciones de seguridad de Docker.
Buenas prácticas como actualizaciones regulares, control de versiones para Dockerfiles y una documentación exhaustiva son vitales para mantener la eficiencia y seguridad de un entorno basado en Docker. Mientras que este enfoque puede mejorar significativamente los flujos de trabajo de desarrollo y la colaboración, es importante equilibrar sus beneficios frente a sus complejidades y alinearlo con las necesidades y capacidades del equipo.
¿Qué sigue?#
Entonces, ¿qué sigue? ¡Comienza a programar! Si eres nuevo en la persistencia de bases de datos, consulta estos recursos para comenzar a usar Java, Python y Node.js:
- https://github.com/mariadb-developers/java-quickstart
- https://github.com/mariadb-developers/python-quickstart
- https://github.com/mariadb-developers/nodejs-quickstart