Docker: ¿Cómo sincronizar en vivo la carpeta host con la carpeta contenedor?


Estoy trabajando en un sitio web impulsado por Node. Así que he hecho un Dockerfile simple que agrega los archivos de mi sitio al FS del contenedor, instala el Nodo y ejecuta la aplicación cuando corro el contenedor, exponiendo el puerto privado 80.

Pero si quiero cambiar un archivo para esa aplicación, tengo que reconstruir la imagen del contenedor y volver a ejecutarla. Eso lleva unos segundos.

¿Hay una manera fácil de tener algún tipo de "sincronización en vivo", como NFS, para que los archivos de la aplicación de mi sistema host estén sincronizados con los de la ejecuta el contenedor?

De esta manera solo tengo que volver a iniciarlo para que se apliquen los cambios, o mejor aún, si utilizo algo como supervisor, se hará automáticamente.

Author: conradkdotcom, 2013-09-18

2 answers

Puede usar volúmenes para hacer esto. Tienes dos opciones:

  1. Volúmenes administrados por Docker:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    

El archivo que edite en el segundo contenedor actualizará el primero.

  1. Volumen del directorio de host:

    docker run -v `pwd`/host/src/path:/container/src/path nodejsapp
    

Los cambios que realice en el host actualizarán el contenedor.

 37
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-11 07:34:28

Si está bajo OSX, ese tipo de compartimientos de volumen puede volverse muy lento, especialmente con aplicaciones basadas en nodos ( muchos archivos ). Para esto, http://docker-sync.io puede ayudarle a tener un volumen compartido como la sincronización, sin usar volúmenes compartidos, esto generalmente acelera la velocidad de lectura/escritura del contenedor del directorio de código de 50 a 80 veces, dependiendo de qué docker-machine utilice.

Para el rendimiento, véase https://github.com/EugenMayer/docker-sync/wiki/4.-Performance y para ejemplos fáciles de cómo usarlo ver las placas de cocción https://github.com/EugenMayer/docker-sync-boilerplate para su caso el ejemplo al unísono https://github.com/EugenMayer/docker-sync-boilerplate/tree/master/unison es el que necesitaría para NFS como sync

 1
Author: Eugen Mayer,
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-11 07:28:24