Ir al contenido

Un entorno de desarrollo completo con Docker

·924 palabras·5 mins
Alejandro Duarte
Autor
Alejandro Duarte
Alejandro Duarte es un Ingeniero de Software, escritor publicado y galardonado. Actualmente, trabaja para MariaDB plc como Ingeniero de Relaciones con Desarrolladores (Developer Relations Engineer). Comenzó su trayectoria en programación a los 13 años con BASIC en una rudimentaria pantalla negra, para lugo rápidamente transitar a C, C++ y Java durante sus años académicos en la Universidad Nacional de Colombia. Trasladándose primero al Reino Unido y luego a Finlandia, Alejandro profundizó su participación en la comunidad de código abierto. Es reconocido en los círculos de Java, acreditado con artículos y videos que acumulan millones de vistas, y presentaciones en eventos internacionales.

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.

VS Code ejecutándose en el navegador

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.

Cliente de base de datos DbGate

Alternativamente, puedes usar la extensión Database Client para Visual Studio Code dentro del IDE, en cuyo caso, debes usar mariadb como Host.

Extensión Database Client para VS Code

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:

Relacionados

Un nuevo capítulo en MariaDB: Uniéndome al equipo de Productos
·339 palabras·2 mins
Durante los últimos casi dos años, he tenido la increíble oportunidad de trabajar con el equipo de Marketing en MariaDB plc como Developer Advocate.
¿Qué es MariaDB?
·400 palabras·2 mins
SQL Bases de Datos
MariaDB es un sistema de gestión de bases de datos relacionales de código abierto que utiliza el Lenguaje de Consulta Estructurada (Structured Query Language o SQL) para administrar y manipular datos.
Mi experiencia en Latinoamérica presentando La Evolución de MariaDB
·619 palabras·3 mins
Eventos Bases de Datos
La semana pasada, tuve el placer de dar una charla en el evento de código abierto organizado por nuestro partner Imagunet en Colombia.