Docker esencial

Controlar la caché en Docker

Prueba ahora LinkedIn Learning sin cargo y sin compromiso.

Prueba gratis Mostrar modalidades de suscripción
Los mecanismos de la caché de Docker pueden parecer un poco oscuros al principio, pero nos pueden ayudar a compilar los contenedores mucho más rápido y evitar trabajo o tiempo de procesador inútilmente gastado. Saber en qué ocasiones actúa la caché de Docker nos ayudará a optimizar la ejecución de los Dockerfile.

Transcripción

Según nos vayamos acostumbrando a compilar imágenes Docker, nos daremos cuenta de que existe una caché que nos ayuda a acelerar la construcción de determinadas capas. Esto es bastante fácil de verificar si compilamos dos veces seguidas el mismo Dockerfile. Podemos, de esta manera, compilar esta imagen que normalmente se tardará alrededor de unos 15 segundos. Como vemos, el tiempo de ejecución ha sido de 14 segundos. Sin embargo, si volvemos a ejecutar el mismo proceso de compilación, veremos que será prácticamente instantáneo, ni siquiera llegando a una décima de segundo. E incluso, si utilizamos el mismo proceso de compilación cambiando el nombre de la imagen, reaprovechará los datos anteriores tardando el mismo tiempo que al rehacer la imagen anterior. Es conveniente saber cómo funciona esta caché de Docker, porque así podremos aprovecharla a nuestro favor, y a veces también evitar problemas que se pueden presentar. La caché de Docker lo que hace es vigilar desde la imagen de inicio que nosotros utilizamos, —por ejemplo, en este caso, Debian 9— y con la información que tiene de toda la jerarquía de las capas que hay, es decir, desde la imagen de inicio, cuáles capas son las que cuelgan de ella y cuáles son todas sus subcapas lo que hace es comparar todas las capas que cuelgan de Debian 9 y ver si alguna se ha generado ejecutando este comando. Si Docker encontrara que alguna de las capas se ha generado ejecutando "apt-get update && apt-get install -y nginx", aprovecharía esa capa, la acoplaría a nuestra nueva imagen, y seguiría buscando en el siguiente comando. De la misma manera, si encuentra una capa que es hija de aquella que se ha generado con este comando, con "rm /etc/nginx/..." etc., aprovecharía esa capa, incorporaría su referencia dentro de la imagen, y seguiría buscando. En el momento en el que no encuentre ninguna capa que se haya generado siguiendo el comando que tenemos a continuación, lo que hará será regenerar todas las capas siguientes, sea lo que sea que encuentre después. Por lo tanto, solo genera las capas que no se han generado nunca. No es esto exactamente así en todos los casos, sino que hay dos comandos, "add" (A-D-D) y "copy", que sirven para introducir ficheros en el interior de las imágenes que no solo se verifica si han sido exactamente el mismo comando, por ejemplo, "ADD ficheros/curso.conf /etc/nginx/..." etc., sino que comprueba cuál es el contenido del fichero. Si yo, aunque no cambie el comando que tengo en esta línea, cambio el contenido de "curso.conf", automáticamente, a partir de esta capa, se regenerará de nuevo. Por lo tanto, cuando cambiamos un fichero de configuración, o cuando cambiamos el contenido de algún tipo de código HTML, imagen, lo que sea que tenemos que copiar desde fuera de la imagen, adentro, automáticamente se regenerarán esas capas. Esto puede ocasionar un pequeño problema en determinados casos. Por ejemplo, en el caso de instalar paquetes de un repositorio, simplemente verificará que el comando es el mismo, pero Docker no sabe si tenemos bajada la última versión del paquete o no. Es decir, si nosotros hemos generado esta imagen base hace 3, 4, 5 semanas, y, durante todas las recompilaciones que hemos ido haciendo, se ha ido reaprovechando esta primera capa que es la que tiene la instalación del paquete de nginx, probablemente estemos desactualizados contra el repositorio de nginx. En el repositorio de nginx tendremos nuevas actualizaciones de seguridad, tendremos paquetes nuevos, pero a ojos de Docker, él no sabe si hay paquetes nuevos o no, y sigue siendo el mismo comando. Por lo tanto, a veces nos interesa agregar un parámetro adicional a la construcción de nuestro paquete, y de vez en cuando rehacer enteras las imágenes desde cero. Si queremos rehacer una imagen desde cero, por ejemplo, para tomar los paquetes más actualizados, lo que tendremos que hacer será agregar el parámetro "--no-cache". Poniendo como "true" el valor del parámetro "--no-cache", lo que hará será olvidar toda la caché de todas las capas de todos los comandos que ejecutamos en el Dockerfile, y compilarlo de nuevo desde cero. Por lo tanto, es muy interesante tener en cuenta cómo funcionan las capas de caché de Docker, y saber que las podemos aprovechar, tanto para la velocidad como para tener control, de cómo se generan nuestros Dockerfiles.

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

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.