¿Imágenes Docker Gigantes? ¡No Más!

Todos hemos estado ahí: tu contenedor Docker, que en desarrollo apenas pesa unos megas, en producción se convierte en un gigante de varios gigas. Esto no solo retrasa los despliegues, sino que también consume más recursos y aumenta la superficie de ataque. ¡Es hora de poner tu Docker en dieta! Aquí te traemos 3 trucos probados para que tus imágenes sean ligeras y eficientes.

Truco 1: Usa Imágenes Base Mínimas

El primer paso es elegir la imagen base correcta. Olvídate de las imágenes completas como ubuntu o centos para tus aplicaciones. Opta por versiones Alpine o Distroless.

Alpine Linux es una distro ligera basada en musl libc y busybox. Es ideal para la mayoría de las aplicaciones.

# Ejemplo con Node.js y Alpine
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./ 
RUN npm install
COPY . .
RUN npm run build

FROM node:18-alpine
COPY --from=builder /app/dist /app/dist
CMD ["node", "/app/dist/server.js"]

Truco 2: Combina y Conquista tus Capas (Multi-Stage Builds)

Las imágenes Docker se componen de capas. Cada instrucción en tu Dockerfile crea una nueva capa. Si haces instalaciones y luego las eliminas en pasos separados, esas capas intermedias con los archivos instalados (pero luego borrados) siguen existiendo en la imagen final. ¡Aquí es donde brillan los multi-stage builds!

Como viste en el ejemplo anterior, usamos una primera etapa (builder) para compilar o construir nuestra aplicación y luego copiamos sólo los artefactos necesarios a una imagen base limpia y mínima.

Truco 3: Limpia Después de Instalar

Incluso si usas Alpine, a veces necesitas instalar paquetes temporales para la construcción. ¡No dejes rastro!

Si necesitas instalar dependencias con apt (en Debian/Ubuntu) o apk (en Alpine), asegúrate de limpiar la cache después. Combina la instalación y la limpieza en una única instrucción RUN para que sólo se cree una capa.

# Ejemplo con Alpine y limpieza de cache
RUN apk add --no-cache build-base && 
    npm install && 
    rm -rf /var/cache/apk/*

Aplicando estos trucos, notarás una diferencia radical en el peso de tus imágenes. ¡Menos peso, más velocidad y seguridad para tu producción!