DEV Community

Cover image for Crea imágenes Docker ligeras y seguras
Israel Oña Ordoñez 🚀
Israel Oña Ordoñez 🚀

Posted on

4 1 1 2

Crea imágenes Docker ligeras y seguras

📝 TL;DR

Optimizar tus imágenes Docker es esencial para mejorar los tiempos de construcción y despliegue, reducir costos y mejorar la seguridad. Este artículo muestra cómo usar multi-stage builds, elegir imágenes ligeras y aplicar buenas prácticas para crear imágenes Docker más eficientes.

 

🤔 ¿Por qué optimizar imágenes Docker?

En la contenerización, el tamaño y la seguridad de las imágenes Docker tienen un impacto significativo en el rendimiento, la eficiencia y la seguridad de las aplicaciones. Las imágenes grandes aumentan los tiempos de construcción, despliegue y consumo de recursos, mientras que las vulnerabilidades en las imágenes pueden exponer tu aplicación a riesgos de seguridad.

Optimizar tus imágenes Docker te permite:

  • Mejorar los tiempos de construcción y despliegue: Imágenes más pequeñas se construyen y despliegan más rápido.
  • Reducir costos de almacenamiento y transferencia: Imágenes más ligeras ocupan menos espacio y se transfieren más rápido.
  • Mejorar la seguridad: Reducir vulnerabilidades y riesgos de seguridad en tus imágenes.

 

⚙️ Principales estrategias de optimización

1. Multi-stage builds

Las multi-stage builds te permiten dividir la construcción de tu imagen en múltiples etapas, lo que te permite compilar y empaquetar tu aplicación en una etapa y copiar solo los artefactos necesarios a una imagen final más pequeña.

Multi-stage build

Beneficios:

  • Imágenes más pequeñas: La imagen final, basada en una imagen más ligera, solo contiene los artefactos necesarios.
  • Reduce la superficie de ataque: Las etapas de construcción no se incluyen en la imagen final.

 

2. Elegir imágenes base ligeras

Usar imágenes base ligeras y especializadas, como Alpine Linux, Slim o Buster, en lugar de imágenes genéricas como Ubuntu o Debian, puede reducir significativamente el tamaño de tus imágenes.

Imágenes base ligeras

Beneficios:

  • Imágenes más pequeñas: Las imágenes base ligeras tienen un tamaño reducido.
  • Menos vulnerabilidades: Menos paquetes y dependencias significan menos vulnerabilidades potenciales.

 

3. Usar un usuario no-root

Ejecutar contenedores con un usuario no-root (sin privilegios) mejora la seguridad de tus aplicaciones, ya que limita los daños potenciales en caso de una vulnerabilidad o ataque.

Usuario no-root

Beneficios:

  • Mejora la seguridad: Limita los daños potenciales en caso de una vulnerabilidad o ataque.
  • Cumplimiento de estándares de seguridad: Algunas regulaciones y estándares de seguridad requieren ejecutar aplicaciones con usuarios no-root.

 

4. Excluir archivos innecesarios

Usar .dockerignore para excluir archivos y directorios innecesarios de tus imágenes Docker puede reducir significativamente el tamaño de tus imágenes y mejorar los tiempos de construcción.

Excluir archivos innecesarios

Beneficios:

  • Imágenes más pequeñas: Menos archivos y directorios innecesarios.
  • Mejora los tiempos de construcción: Menos archivos a copiar y procesar.

 

5. Optimizar capas de imagen

Reducir el número de capas de imagen y combinar instrucciones en una sola capa puede mejorar el rendimiento y la eficiencia de tus imágenes Docker.

Optimizar capas de imagen

Beneficios:

  • Mejora el rendimiento: Menos capas significa menos operaciones de lectura/escritura.
  • Reduce el tamaño de la imagen: Menos capas y posibilidad de eliminar archivos temporales en la misma capa donde se crean.

 

6. Escaneo de vulnerabilidades

Utilizar herramientas de escaneo de vulnerabilidades, como Trivy, te permite identificar y corregir vulnerabilidades en tus imágenes Docker antes de desplegarlas en producción.

Escaneo de vulnerabilidades

Beneficios:

  • Mejora la seguridad: Identifica y corrige vulnerabilidades antes de desplegar tus imágenes.
  • Protege tu aplicación: Reduce el riesgo de ataques y brechas de seguridad.

 

🚀 Resultados de la optimización

Al aplicar estas estrategias de optimización, puedes obtener los siguientes resultados:

  • Imágenes más pequeñas: Reducción significativa del tamaño de las imágenes Docker, en este caso, de 1.12 GB a 159 MB.
  • Mejora de los tiempos de construcción: Reducción en los tiempos de construcción, en este caso, 60% más rápido.
  • Mejora de la seguridad: Reducción de vulnerabilidades y riesgos de seguridad en las imágenes, en este caso, 0 vulnerabilidades.
  • Mejora de la eficiencia: Reducción de costos de transferencia, en este caso, 85% menos de datos transferidos.
  • Cumplimiento de estándares de seguridad: Ejecución de contenedores con un usuario no-root para mejorar la seguridad.

 

📂 Repositorio del proyecto

Para ver un ejemplo práctico de cómo aplicar estas estrategias de optimización, puedes clonar o explorar el repositorio asociado.

Repositorio: https://github.com/israoo/docker-image-optimization

Este repositorio contiene:

  • Un ejemplo de Dockerfile con las mejores prácticas de optimización.
  • Un archivo .dockerignore para excluir archivos innecesarios.
  • Un script para escanear vulnerabilidades en la imagen Docker con Trivy.
  • Instrucciones detalladas en el archivo README.md sobre cómo construir, optimizar y escanear la imagen Docker paso a paso.

 

🔗 Referencias/Extras

 

🚀 ¿Qué sigue?

Prueba estas técnicas en tus proyectos y comparte los resultados. ¿Conoces otras estrategias para optimizar imágenes Docker? ¡Déjalas en los comentarios!

 

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay