¿Reconstruir el contenedor después de cada cambio?


La documentación de Docker sugiere usar la instrucción ONBUILD si tiene el siguiente escenario:

Por ejemplo, si su imagen es un constructor de aplicaciones python reutilizable, requerirá que el código fuente de la aplicación se agregue en un directorio en particular, y podría requerir que se llame a un script de compilación después de eso. No puedes simplemente llamar a ADD y EJECUTAR ahora, porque aún no tienes acceso al código fuente de la aplicación, y será diferente para cada aplicación construir. Simplemente podría proporcionar a los desarrolladores de aplicaciones un Dockerfile repetitivo para copiar y pegar en su aplicación, pero eso es ineficiente, propenso a errores y difícil de actualizar porque se mezcla con código específico de la aplicación.

Básicamente, todo esto suena bien y bien, pero eso significa que tengo que volver a crear el contenedor de la aplicación cada vez que cambio algo, incluso si es solo un error tipográfico.

Esto no parece ser muy eficiente, por ejemplo, al crear web aplicaciones en las que está acostumbrado a cambiar algo, guardar y presionar actualizar en el navegador.

¿Cómo lidias con esto?

 48
Author: Golo Roden, 2014-06-18

1 answers

Significa que tengo que volver a crear el contenedor de la aplicación cada vez que cambio algo, incluso si es solo un error tipográfico

No necesariamente, podría usar la opción -v para docker run comando para inyectar sus archivos de proyecto en un contenedor. Por lo tanto, no tendría que reconstruir una imagen de docker.

Tenga en cuenta que la ONBUILD la instrucción está pensada para casos en los que un Dockerfile hereda FROM un archivo Docker padre. El ONBUILD las instrucciones encontradas en el archivo Dockerfile padre se ejecutarían cuando Docker construyera una imagen del archivo Dockerfile hijo.


Esto no parece ser muy eficiente, por ejemplo, al crear aplicaciones web donde se utiliza para cambiar algo, guardar, y pulse actualizar en el navegador.

Si está utilizando un contenedor de Docker para servir una aplicación web mientras está iterando en ese código de aplicación, entonces le sugiero que cree una imagen especial de Docker que solo contenga todo para ejecutar tu aplicación, excepto el código de la aplicación.

Luego comparta el directorio que contiene el código de la aplicación en su máquina host con el directorio desde el que se sirven los archivos de la aplicación dentro del contenedor docker.

Por ejemplo, si estoy desarrollando un sitio web estático y mi espacio de trabajo está en /home/thomas/workspace/project1/, entonces iniciaría un contenedor ejecutando nginx con:

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx

De esta manera puedo cambiar archivos en /home/thomas/workspace/project1/ y los cambios se reflejan en vivo sin tener que reconstruir la docker imagen o incluso reiniciar el contenedor docker.

 75
Author: Thomasleveil,
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-05-07 17:31:34