View on GitHub

EvaluaUGR

Proyecto para la asignatura de Cloud Computing del Máster en Ingeniería Informática

Uso de Docker

Tenemos que construir una imagen para poder ejecutar en ella los tests. En nuestro caso, necesitamos tanto que el lenguaje Go esté instalado en el mismo como el gestor de tareas Task. Queremos que la imagen sea lo más pequeña por posible. Por eso, vamos a hacer una serie de pruebas con tres imágenes base diferentes:

Se ha intentado buscar otra imagen no oficial del lenguaje que fuese más pequeña pero las existentes o no nos servían para nuestro propósito o eran incluso más pesadas.

Primero, vamos a ver cómo resultan estas imágenes después de añadir lo necesario para ejecutar los tests. Los resultados obtenidos según el tamaño son:

Vemos que en principio las más adecuadas serían usar la oficial del lenguaje o la de Alpine. Destaca que en este último caso la imagen aumenta demasiado su tamaño. Veamos qué está pasando e intentemos disminuir el tamaño de ambas imágenes al máxima y ver cuál es más conveniente.

Primero en la del lenguaje oficial hemos tenido que instalar curl para poder descargar el gestor de tareas. Si una vez descargado el gestor lo eliminamos conseguimos reducir su tamaño un poco a 313 MB 6dbff1. Vemos que en este caso solo hemos aumentado la imagen base en 14 MB. Sin embargo, vemos que no hemos uso de una herramienta que ayuda a reducir el tamaño: builds en múltiples etapas. En este caso de la imagen oficial, lo que vamos a hacer es usar una etapa para descargar el gestor de tareas y finalmente solo tendremos que copiar la carpeta en la que se ha instalado para usarla. Haciendo uso de este mecanismo obtenemos una imagen de 305 MB 31c6bf80. No está nada mal. Veamos un poco más qué hay dentro de la misma haciendo uso de la herramienta dive.

Vemos que tenemos una eficiencia del 99% y un espacio desperdiciado de 526 kB. Como vemos en la imagen anterior vemos que ese espacio está ocupado por los certificados en su mayor parte. Esto también podemos verlo en otra ventana que tiene la herramienta dive para examinar el contenido de cada capa. Como no queremos tocar nada de los certificados ya que es un tema más delicado no vamos a optimizar más este contenedor.

Pasamos ahora a ver qué ocurre cuando construimos a partir de la imagen de Alpine sin el lenguaje instalado. Si partimos de la imagen anterior sobre el análisis de la imagen oficial, vemos que parte de una imagen bastante pequeña (5.6 MB) y que la capa de instalación del lenguaje ocupa solamente 293 MB. ¿Cómo es posible que en nuestro caso aumente casi 460 MB? Bien, en vez de optimizar nuestra imagen partiendo de la que hemos construido nosotros mismos, viendo qué podemos eliminar, vamos a usar la oficial. Como hemos dicho, vemos que en el caso oficial la parte de instalación del lenguaje está bastante optimizado. Por eso, lo que haremos será utilizar la imagen oficial para instalar el gestor de tareas y luego copiaremos el mismo y los archivos del lenguaje a la definitiva. De este modo, obtenemos lo siguiente:

Vemos que hemos conseguido reducir el tamaño a 303 MB 2e5a8a6. También hay espacio desperdiciado, pero solamente 4.7 kB y vemos que se trata de la creación del usuario para ejecutar los tests sin privilegios.

Por lo tanto vamos a tomar como base la imagen de Alpine ya que tras la optimización es la que menos espacio ocupa.