Despliegue de Aplicaciones con Docker: MySQL, Spring Boot y Nginx

Este tutorial detala el proceso de despliegue de un entorno de aplicaciones utilizando Docker, incluyendo una base de datos MySQL, una aplicación Spring Boot y un servidor Nginx como proxy enverso.

1. Instalación y Configuración de Docker

Primero, asegúrate de tener las hreramientas necesarias y configura el repositorio de Docker en tu sistema.


# Crear directorio de trabajo
mkdir aplicaciones-docker
cd aplicaciones-docker

# Instalar herramientas de sistema
yum install -y yum-utils device-mapper-persistent-data lvm2

# Configurar el repositorio de Docker de Aliyun
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Solución a posibles errores de yum
# rm -f /var/run/yum.pid

# Instalar Docker CE
yum -y install docker-ce

# Iniciar el servicio Docker
systemctl start docker

2. Descarga de Imágenes Docker Esenciales

Descarga las imágenes necesarias para tu despliegue.


docker pull nginx
docker pull openjdk
docker pull mysql/mysql-server:5.7

3. Configuración de Red Docker Personalizada

Crea una red Docker para que tus contenedores puedan comunicarse.


# Crear una red con un rango de subred específico (prueba con 172.33.0.0/16 o ajusta si es necesario)
docker network create --subnet=172.33.0.1/16 red-aplicacion

4. Despliegue de la Base de Datos MySQL

Prepara los directorios para la configuración y los datos de MySQL, y luego ejecuta el contenedor.


# Crear directorios para la configuración, datos y scripts de MySQL
mkdir -p mysql/{config,datos,scripts}

# Copia tu archivo de configuración 'my.cnf' al directorio 'config'
# Copia tu script SQL 'datos_iniciales.sql' al directorio 'scripts'

# Crear y ejecutar el contenedor MySQL
docker run -itd \
-v /ruta/a/aplicaciones-docker/mysql/config/my.cnf:/etc/my.cnf \
-v /ruta/a/aplicaciones-docker/mysql/datos:/var/lib/mysql \
-v /ruta/a/aplicaciones-docker/mysql/scripts:/scripts \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=tu_contrasena_segura \
--name contenedor-mysql \
--net red-aplicacion \
mysql/mysql-server:5.7

4.1. Configuración Inicial de MySQL

Accede al contenedor de MySQL para realizar configuraciones iniciales y cargar datos.


# Entrar al contenedor MySQL
docker exec -it contenedor-mysql bash

# Iniciar sesión en MySQL
mysql -uroot -ptu_contrasena_segura

# Habilitar el acceso remoto para el usuario root (ajusta según tus necesidades de seguridad)
grant all on *.* to root@'%' identified by 'tu_contrasena_segura';
flush privileges;

# Crear la base de datos de tu aplicación
create database nombre_basedatos;

# Usar la base de datos
use nombre_basedatos;

# Cargar los datos iniciales desde tu script SQL
source /scripts/datos_iniciales.sql

# Salir de MySQL
exit

# Salir del contenedor
exit

Verifica que el contenedor de MySQL sigue en ejecución:


docker ps

5. Despliegue de la Aplicación Spring Boot

Crea un Dockerfile para tu aplicación Spring Boot y construye la imagen.


# Regresar al directorio principal de aplicaciones
cd /ruta/a/aplicaciones-docker

# Copia tu archivo JAR de la aplicación Spring Boot al directorio
# cp /ruta/a/tu/app.jar .

# Crear el archivo Dockerfile
cat <<eof> Dockerfile
FROM openjdk:latest
WORKDIR /proyecto
COPY tu_aplicacion.jar /proyecto
CMD ["java", "-jar", "tu_aplicacion.jar", "--spring.datasource.url=jdbc:mysql://contenedor-mysql:3306/nombre_basedatos"]
EOF

# Construir la imagen Docker de la aplicación
docker build -t mi-app-springboot:v1 .
</eof>

5.1. Ejecución de Contenedores Spring Boot

Lanza los contenedores de tu aplicación Spring Boot dentro de la red personalizada.


# Ejecutar instancias de la aplicación (sin exponer puertos)
docker run -itd --name app-instancia-1 --net red-aplicacion mi-app-springboot:v1
docker run -itd --name app-instancia-2 --net red-aplicacion mi-app-springboot:v1

# Ejecutar una instancia exponiendo el puerto para acceso externo
docker run -itd --name app-instancia-3 --net red-aplicacion -p 8080:8080 mi-app-springboot:v1

# Accede a tu aplicación a través del puerto expuesto, por ejemplo:
# curl http://localhost:8080/tu/endpoint

6. Despliegue del Servidor Nginx

Configura Nginx para que actúe como proxy inverso y sirva contenido estático.


# Crear directorios para la configuración y el contenido web de Nginx
mkdir -p nginx/{configuracion,html}

# Copia tu archivo de configuración de Nginx (ej. 'mi_proxy.conf') al directorio 'configuracion'
# Coloca tus archivos HTML y otros recursos estáticos en el directorio 'html'

# Crear y ejecutar el contenedor Nginx
docker run -itd \
-v /ruta/a/aplicaciones-docker/nginx/configuracion:/etc/nginx/conf.d \
-v /ruta/a/aplicaciones-docker/nginx/html:/etc/nginx/html \
-p 80:80 \
--name contenedor-nginx \
--net red-aplicacion \
nginx

Ahora deberías poder acceder a tu contenido estático o a tus aplicaciones a través del puerto 80 del host, configurado por Nginx.

7. Gestión del Firewall (Opcional)

Asegúrate de que tu firewall no esté bloqueando el acceso a los puertos necesarios.


# Comprobar el estado del firewall
systemctl status firewalld

# Para detener temporalmente el firewall (usar con precaución)
# systemctl stop firewalld

Etiquetas: Docker MySQL Spring Boot Nginx despliegue

Publicado el 10-25 00:23