Docker actualizando la imagen cuando cambia dockerfile


Estoy jugando con docker creando un Dockerfile con algunas instrucciones de nodejs. En este momento, cada vez que hago cambios en el dockerfile, recreo la imagen ejecutando sudo docker build -t nodejstest . en mi carpeta de proyecto, sin embargo, esto crea una nueva imagen cada vez y se traga mi ssd muy pronto.

¿Hay alguna forma de actualizar una imagen existente cuando cambio el dockerfile o me veo obligado a crear una nueva cada vez que hago cambios en el archivo?

Lo siento si es una pregunta tonta

 58
Author: Romeo Mihalcea, 2013-09-14

3 answers

La compilación de Docker admite el almacenamiento en caché mientras no haya una instrucción ADD. Si está desarrollando y cambiando archivos de forma activa, solo se reconstruirá lo que esté después de ADD.

Desde 0.6.2 (programado hoy), puede hacer docker build --rm . y eliminará los contenedores temporales. Sin embargo, conservará las imágenes.

Para eliminar las imágenes huérfanas, puede comprobarlas con docker images y realizar un docker rmi <id> en una de ellas. A partir de ahora, hay una poda automática y todas las imágenes sin etiquetar (huérfanos, versiones anteriores) se eliminarán.

 38
Author: creack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 06:14:58

De acuerdo con esta guía de mejores prácticas si mantiene las primeras líneas de su dockerfile iguales, también las almacenará en caché y reutilizará las mismas imágenes para futuras compilaciones

 13
Author: Reza S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 07:36:01

Durante el desarrollo, tiene menos sentido volver a construir un contenedor completo para cada commit. Más tarde, puede automatizar la creación de un contenedor de Docker con su código más reciente como parte de su proceso de QA/implementación.

Básicamente, puedes elegir hacer un contenedor mínimo que extraiga código (usando git al iniciar el contenedor, o usando -v /home/myuser/mynode:/home/myuser/mynode con ENTRYPOINT para ejecutar el nodo).

Ver mi respuesta a esta pregunta:

Aplicación Docker rails y git

 1
Author: BraveNewCurrency,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:56