“ Contenedorización ”, dijo inequívocamente mi gerente cuando le pregunté sobre lo que más revolucionó la industria del desarrollo de software. Sostuvo que sin la contenedorización, el rápido escalamiento y la implementación global del software actual habrían sido un desafío mucho más formidable. Es notable observar que casi todo el software que se utiliza hoy en día aprovecha la contenedorización en diversas capacidades, lo que subraya su papel indispensable en el impulso del ecosistema de software moderno.
Para aquellos de ustedes que no lo saben, aquí hay una definición del sitio web de AWS ~
*“Containerisation is a software deployment process that bundles an application's code with all the files and libraries it needs to run on any infrastructure. Traditionally, to run any application on your computer, you had to install the version that matched your machine's operating system.”*
Las imágenes sirven como bloques de construcción para los contenedores, similares a los planos que guían su creación. Por lo tanto, mantener imágenes de contenedores livianas y optimizadas acelera el proceso de implementación y facilita la distribución de estas imágenes. Al optimizar sus imágenes de Docker, no solo puede acelerar el ciclo de desarrollo general, sino que también refuerza las medidas de seguridad implementadas, garantizando un entorno de software más sólido y eficiente.
En este artículo, exploraremos varios métodos para crear imágenes Docker eficientes y, en última instancia, mejoraremos la eficiencia de su aplicación.
Es un error común tratar los contenedores como máquinas virtuales (VM) y empaquetar más de una aplicación dentro de un solo contenedor. Si bien aumenta el tamaño de su contenedor, esta práctica también tiene otras desventajas.
Se prevé que un contenedor tenga una vida útil estrechamente relacionada con la aplicación que ejecuta. El contenedor debe comenzar cuando se inicia la aplicación y finalizar cuando finaliza la aplicación. Las soluciones de orquestación de contenedores como Docker y Kubernetes dependen en gran medida de este atributo de los contenedores. Si un contenedor ejecuta muchas aplicaciones, las herramientas de orquestación no podrán identificar ni reiniciar su aplicación.
Las imágenes se componen de capas y cada instrucción en su Dockerfile agrega una nueva capa. Las tecnologías de contenedorización, como Docker, intentarán reutilizar capas de compilaciones anteriores siempre que sea posible para reducir el tiempo de construcción. El caché para una capa solo se puede utilizar si ninguna de las capas subyacentes ha cambiado desde compilaciones anteriores.
Para mejorar la velocidad de creación de imágenes, es beneficioso colocar instrucciones que pueden cambiar con frecuencia a continuación en su Dockerfile. Este enfoque permite a Docker aprovechar su sistema de almacenamiento en caché de manera más efectiva. Por ejemplo, dado que el código fuente suele sufrir cambios frecuentes, es recomendable copiarlo en la imagen hacia el final del proceso.
Si bien no aclara las imágenes, ¡hace que el proceso de construcción sea rápido!
Con frecuencia, las imágenes de contenedores incluyen herramientas innecesarias, lo que genera imágenes infladas y posibles vulnerabilidades de seguridad. Por ejemplo, los piratas informáticos pueden aprovechar herramientas como netcat
para llevar a cabo actividades maliciosas dentro de su contenedor si obtienen acceso no autorizado.
Mantener estrictamente el conjunto de herramientas y bibliotecas que se envían con la imagen de su contenedor puede ayudar significativamente a reducir las amenazas a la seguridad y también daría como resultado imágenes más delgadas. Las imágenes más pequeñas se descargan más rápido, lo que significa que el contenedor se inicia más rápido.
La imagen a la que hacemos referencia en la instrucción FROM se llama imagen base. La imagen base dicta en gran medida el tamaño de la imagen final creada. Deberíamos intentar utilizar la imagen base más pequeña posible para reducir el tamaño final de nuestra imagen.
Intente utilizar imágenes alpinas siempre que sea posible, ya que son de menor tamaño y a menudo contienen suficientes herramientas para respaldar la actividad de desarrollo.
Incluso cuando una imagen pequeña no contiene todas las herramientas que necesita, usarla puede ser una mejor opción. La instalación de los paquetes que necesita encima de la imagen base más clara aún puede permitir ahorrar en comparación con el uso de la imagen más pesada.
Al copiar el código fuente, es posible que también se copien muchos de los archivos y carpetas no deseados. Esto aumenta el tamaño de la imagen y, en última instancia, provoca hinchazón. Intente minimizar la cantidad de archivos copiados y trate de mantenerlos al mínimo.
En nuestra industria a menudo se pasa por alto la importancia de optimizar las imágenes de los contenedores y establecer las mejores prácticas. Sin embargo, no se pueden subestimar los beneficios sustanciales que se derivan de seguir estas prácticas. Como desarrolladores, es esencial priorizar constantemente la creación de imágenes de contenedores delgadas y rápidas.
Con esto llegamos al final de este artículo. ¡Espero que hayas disfrutado leyéndolo!