web-dev-qa-db-fra.com

Docker: Comment synchroniser le dossier Host avec le dossier Container?

Je travaille sur un site Web propulsé par Node. J'ai donc créé un Dockerfile simple qui ajoute les fichiers de mon site au FS du conteneur, installe Node et exécute l'application lorsque j'exécute le conteneur, exposant le port privé 80.

Mais si je veux changer un fichier pour cette application, je dois reconstruire l'image du conteneur et la réexécuter. Cela prend quelques secondes.

Existe-t-il un moyen facile d'avoir une sorte de "synchronisation en direct", comme NFS, pour que les fichiers d'application de mon système hôte soient synchronisés avec ceux du conteneur en cours d'exécution?

De cette façon, je n'ai qu'à le relancer pour que les modifications s'appliquent, ou mieux encore, si j'utilise quelque chose comme supervisor, cela se fera automatiquement.

43
conradkdotcom

Vous pouvez utiliser des volumes pour ce faire. Vous avez deux options:

  1. Volumes gérés Docker:

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

Le fichier que vous modifiez dans le deuxième conteneur mettra à jour le premier.

  1. Volume du répertoire hôte:

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

Les modifications que vous apportez sur l'hôte mettront à jour le conteneur.

41
creack

Si vous êtes sous OSX, ce type de partage de volume peut devenir très lent, en particulier avec les applications basées sur des nœuds (beaucoup de fichiers). Pour ce problème, http://docker-sync.io peut vous aider, en fournissant un partage de volume comme la synchronisation, sans utiliser de partages de volume, cela accélère généralement la vitesse de lecture/écriture du code du conteneur -répertoire de 50 à 80 fois, selon la station d'accueil que vous utilisez.

Pour les performances, voir https://github.com/EugenMayer/docker-sync/wiki/4.-Performance et pour des exemples simples sur la façon de l'utiliser, voir les passe-partout https: // github.com/EugenMayer/docker-sync-boilerplate pour votre cas l'exemple à l'unisson https://github.com/EugenMayer/docker-sync-boilerplate/tree/master/unison est le celui dont vous auriez besoin pour NFS comme la synchronisation

3
Eugen Mayer