Docker esencial

Reducir la cantidad de capas

¡Prueba gratis durante 10 días

nuestros 1218 cursos !

Prueba gratis Mostrar modalidades de suscripción
El tener una cantidad generosa de capas en nuestro contenedor no es necesariamente malo, pero sí dificulta la gestión y, además, nos podríamos encontrar con problemas si llegamos al límite de capas soportado por Docker. Aparte, a mayor número de capas, más dificultad para seguir la caché de nuestras imágenes.

Transcripción

El tener muchas capas en vuestro contenedor o imagen Docker no es necesariamente malo pero sí que es una gran ineficiencia y aparte podríais llegar a algún límite de la cantidad de capas que podéis gestionar. Podéis ver la cantidad de capas que tiene una imagen con el comando "history", que en este caso podéis ver que son unas cuantas, tampoco una cantidad exagerada. Pero tenéis que tener en cuenta primero varios límites. AUFS, el driver de almacenamiento, que podéis encontrar por defecto en la mayoría de las instalaciones tiene un límite de 42 capas. A partir de la capa 42 no podréis crear más capas en ninguna imagen o contenedor, es lo primero a tener en cuenta. E incluso en otros drivers de almacenamiento aunque tengan más capacidad de capas, por defecto Docker tiene un límite de 127. Ese es el primero de los límites a tener en cuenta. Pero por otro lado, la eficiencia si tenéis muchas capas, se reduce a la hora de descargar o subir contenedores o imágenes, el acceso a las capas puede ser un poco más lento también, pero también os podéis encontrar con un asunto de espacio. Vamos a ver como ejemplo este "Dockerfile" que sirve para construir una imagen de una herramienta llamada Terraform. Veis que es un "Dockerfile" relativamente sencillo. Partimos de la imagen de "golang" del lenguaje Go, de "alpine", porque es un proyecto programado en Go, instala "git bash openssh", pone una variable de entorno y tiene una serie de comandos. Tenéis que recordar que cada uno de los comandos de un "Dockerfile" lo que hace es agregar una capa adicional a vuestra imagen. El primero, se descarga el código fuente de Git, después se coloca en la versión adecuada que quiere compilar —definida aquí arriba con la 0.9.1— ejecuta el script de compilación y al terminar borra el código fuente del proyecto porque no nos va a hacer falta para ejecutar esta herramienta. Vamos a realizar la compilación. Terminamos de compilar el proyecto y vamos a mirar la imagen resultante. Tenemos una terrible imagen, por llamarlo de alguna manera, de 1,09 gigabytes, partiendo de la base de 257 megabytes. Hay algo que no está funcionando aquí. Vemos que tenemos muchísimas capas y que una detrás de otra lo único que hacen es agregar megabytes, megabytes, megabytes,megabytes. ¿Por qué ocurre esto? Resulta que el sistema de capas que tenemos lo que va almacenando son los cambios con cada uno de los comandos que ejecutamos. Vemos que en concreto, a esta altura, hemos agregado, prácticamente, 800, 900 megabytes. Pero sin embargo, después de borrar el código fuente, no hemos notado ninguna mejora. No vemos ningún número en negativo que diga que nuestra imagen se ha reducido de tamaño ¿Por qué? Precisamente por eso, como se almacenan todos los cambios y podemos volver a cualquier punto anterior, siempre conservamos los datos de las capas anteriores. Por lo tanto, el agregar una capa que borre un fichero no nos va a reducir el tamaño de la imagen. En la práctica, al final ese fichero no lo encontraremos en el contenedor que utilicemos; pero en todo el histórico, en todo el historial de la imagen que tenemos seguirán ahí esos ficheros. ¿Qué se recomienda para esto? Lo que se recomienda es que cuando queramos borrar todos los datos extras de un comando, por ejemplo, nos descargamos un zip, lo descomprimimos, lo copiamos y borramos el zip; nos bajamos un código fuente como este, lo compilamos y después borramos el código, que lo hagamos todo en un mismo comando para que todo se ejecute en una misma capa y al terminar la ejecución ya no esté ese fichero o esos ficheros ahí que tengan que ser guardados en el histórico de las capas. Veamos. Con esto lo que hacemos es en un solo comando, solo con este "run", ejecutamos todos estos comandos uno detrás de otro y quedan todos en la misma capa. Vamos a volver a compilar... ...con otro "tag". Terminada la segunda compilación, vamos a ver el resultado. Como veis, pasamos de una diferencia de 1,09 gigabytes a 491 megabytes porque realmente hemos borrado el código fuente en la misma capa que estábamos generando la compilación y no hemos generado una capa entera con las diferencias de ello. Es decir, hemos borrado todo lo que no nos hacía falta antes de terminar de generar la capa. Como veis, es muy importante el tener un poco de control sobre las capas que generamos para tenerlo todo eficiente bajo control.

Docker esencial

Descubre lo que te ofrece Docker y aprende a empaquetar aplicaciones junto con todas sus dependencias en un contenedor virtual que podrás ejecutar desde cualquier servidor Linux.

2:18 horas (36 Videos)
Actualmente no hay comentarios.
 
Software:
Fecha de publicación:26/04/2017
Duración:2:18 horas (36 Videos)

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.