Dockerización
La dockerización permite empaquetar nuestra aplicación en un contenedor independiente que puede desplegarse fácilmente en cualquier entorno que soporte Docker.
Creación del Dockerfile
Creamos un Dockerfile con enfoque multi-etapa para optimizar el tamaño y rendimiento:
# Etapa de construcciónFROM node:20-alpine AS build
WORKDIR /app
# Copiar package.json y package-lock.jsonCOPY package*.json ./
# Instalar dependenciasRUN npm ci
# Copiar el resto de archivos del proyectoCOPY . .
# Construir la aplicaciónRUN npm run build
# Etapa de producciónFROM nginx:alpine AS production
# Copiar archivos estáticos compiladosCOPY --from=build /app/dist /usr/share/nginx/html
# Configuración básica de nginxCOPY --from=build /app/nginx.conf /etc/nginx/conf.d/default.conf
# Exponer el puertoEXPOSE 80
# Comando de inicioCMD ["nginx", "-g", "daemon off;"]Ventajas del enfoque multi-etapa
- Tamaño reducido: El contenedor final solo incluye lo necesario para ejecutar la aplicación
- Mayor seguridad: Menos dependencias implican menos vulnerabilidades potenciales
- Mejor eficiencia: Imágenes más pequeñas significan despliegues más rápidos
Configuración de Nginx para Docker
Creamos un archivo nginx.conf en la raíz del proyecto para servir los archivos estáticos:
server { listen 80; server_name localhost;
root /usr/share/nginx/html; index index.html;
location / { try_files $uri $uri/ =404; }
# Configuración para archivos estáticos location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; add_header Cache-Control "public, max-age=31536000"; }}Esta configuración:
- Define el directorio raíz donde se servirán los archivos
- Configura el archivo index por defecto
- Define cómo manejar las rutas
- Optimiza el caché para archivos estáticos
Optimizaciones con .dockerignore
Creamos un archivo .dockerignore para excluir archivos innecesarios del contexto de construcción:
node_modules.git.github.vscode.astrodist*.md.env*!.env.example.dockerignoreDockerfiledocker-compose.ymlLas ventajas de usar .dockerignore incluyen:
- Construcción más rápida: Menos archivos para copiar
- Evitar errores: Previene la copia de archivos que podrían causar problemas
- Mayor seguridad: Evita la inclusión accidental de secretos
Construcción de la imagen
Para construir la imagen Docker, ejecutamos:
docker build -t neodigital-wiki:latest .Ejecución del contenedor
Para ejecutar el contenedor localmente durante el desarrollo:
docker run -d -p 80:80 --name wiki neodigital-wiki:latestSiguientes pasos
Con la aplicación dockerizada, estamos listos para la configuración del servidor donde se desplegará la aplicación.