Docker
Produção
Imagens
Segurança
DevOps
Containerização

Docker para producción: creación de imágenes ligeras y seguras

Docker para producción: creación de imágenes ligeras y seguras

Docker ha transformado la entrega de software, pero el uso de contenedores en producción requiere disciplina. Las imágenes grandes aumentan los costos de almacenamiento y los tiempos de implementación, mientras que las vulnerabilidades pueden exponer su entorno a ataques. Esta guía presenta mejores prácticas que garantizan imágenes ligeras, seguras y versionables.

##Buenas prácticas esenciales

  • Compilaciones de varias etapas, compila el código en una etapa y copia solo los artefactos finales.
  • Imágenes base minimalistas, prefiera alpine o distroless para reducir la superficie de ataque.
  • Nunca incluyas credenciales, .env archivos, claves o tokens nunca deben copiarse en la imagen.
  • Ejecutar como usuario no root, crear un usuario dedicado y configurar el contenedor para usarlo.
  • Versión sin latest, use etiquetas semánticas (v1.2.3) para trazabilidad y reversión.

Ejemplo sencillo de Dockerfile de varias etapas (Node.js), 9 líneas

FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # gera artefatos estáticos FROM gcr.io/distroless/nodejs20 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER nonroot EXPOSE 3000 CMD ["dist/index.js"]

Lista de verificación de seguridad de imágenes

  • Escanear vulnerabilidades con Trivy, Clair o Snyk.
  • Comprueba las capas innecesarias (docker history).
  • [] Definir usuario no root en Dockerfile.
  • Eliminar archivos temporales (npm cache clean --force).
  • [] Firme la imagen usando Docker Content Trust para garantizar la integridad.

Estrategia de versiones

EtiquetaCuándo utilizar
v1.2.3Lanzamiento estable, compatible con semver.
v1.2.3-rc.1Liberar candidato para pruebas.
v1.2.3-sha.<commit>Construcción automatizada para CI, rastreable.

Integración CI/CD simplificada (Acciones de GitHub), 7 líneas

name: Build & Push Docker Image on: push: branches: [main] jobs: docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build image run: docker build -t myapp:$ . - name: Login to Docker Hub uses: docker/login-action@v2 with: username: $ password: $ - name: Push image run: docker push myapp:$

Conclusión

Al aplicar estas prácticas se obtienen imágenes más pequeñas, más seguras y fácilmente versionables, reduciendo los costos operativos y mitigando el riesgo de vulnerabilidades en producción.


¿Qué estrategias Docker ha adoptado ya? ¡Comparte en los comentarios!

Lea también