Optimiza los despliegues con compilaciones de contenedores multinivel
Los sistemas se vuelven rápidamente muy grandes cuando se entregan completos. Esto incluye el entorno de compilación y pruebas. Incluso si la extracción de los archivos a entregar no es un problema, consume mucho tiempo.
Los contenedores ofrecen la posibilidad de automatizar este proceso.
Aquí tienes la opción de definir varios contenedores en un solo archivo. Un sitio web creado en JavaScript y compilado con Node.js es un buen ejemplo.
Ejemplo de tamaños
- Node.js: ~ 400-600 MB
- Servidor web nginx: ~ 20 MB
- Sitio web: ~ 2 MB
El sistema completo como contenedor resulta en un total de más de 600 MB, aunque solo se necesitan 22 MB (servidor web + sitio web). Además, existe un riesgo de seguridad porque hay software presente que no es necesario para la operación productiva. La solución aquí es una compilación multinivel (multi-stage build).
¿Qué es una compilación multinivel?
En una compilación multinivel se definen varios contenedores en un solo archivo y luego solo se transmiten los datos necesarios de un contenedor a otro.
Ejemplo de Dockerfile multinivel
Continuando con el ejemplo de Node.js, aquí tienes un ejemplo de compilación multinivel. El primer contenedor contiene Node.js como sistema de compilación, en él se crea el sitio web. El segundo contenedor contiene el servidor web, que copia los datos necesarios del primer contenedor después de la compilación.
## Sistema Base Etapa 1 ## Usar contenedor comunitario Node.js FROM node:8.11.3 as buildsystem ## Añadir código fuente de nuestro proyecto Git COPY ./source /root/frontend ## Compilar frontend con Node.js WORKDIR /root/frontend/ RUN npm install \ && npm run build ##################################################################### ##################################################################### ## Sistema Base Etapa 2 ## Usar contenedor comunitario nginx FROM nginx:alpine ## Copiar compilación de la etapa 1 RUN mkdir -p /var/www/html/<MiApp> COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MiApp>/ ## Añadir configuración por defecto para nginx ADD default.conf /etc/nginx/conf.d/ ## Publicar puerto EXPOSE 80 ## Iniciar nginx CMD ["nginx", "-g", "daemon off;"]
El resultado es un contenedor pequeño que contiene solo lo más necesario. Usamos una distribución Linux muy pequeña para nginx con alpine.
Ventajas adicionales
Otra ventaja es que puedes acceder a dos contenedores comunitarios listos para usar y, por tanto, no tienes trabajo para crearlos y mantenerlos. Para actualizaciones del sistema, los contenedores comunitarios simplemente se reemplazan regularmente. Todo el proceso se puede automatizar maravillosamente en una canalización (pipeline) con GitLab (u otras herramientas).
Tecnología Industrial
- Tu primer proyecto IoT con Raspberry Pi, DHT11 y ThingSpeak
- Dominando Multiplicación y División con Notación Científica
- Industria 4.0: Preguntas y respuestas con Verena Majuntke de Bosch.IO sobre IoT, automatización y la fábrica del futuro
- Microsoft presenta modelo de lenguaje récord de 17.000 millones de parámetros
- Hoja de ruta impulsada por IA: Guía estratégica para empresas de cadena de suministro
- Compras inteligentes: Fusionando IA con perspectiva humana
- Construcción eficiente de contenedores ARM en sistemas x86
- Optimiza los despliegues con compilaciones de contenedores multinivel
- Domina Node-RED en Docker: Consejos expertos y mejores prácticas
- Grúas Portacontenedores Eficientes: Carga y Descarga de Precisión para Puertos y Patios Ferroviarios
- Construyendo confianza con líderes de negocio: Elegiendo los servicios cloud correctos