Comment synchroniser les fichiers d’un conteneur Docker avec son hôte?

Peut-être que je complique cela.

Mon objective est de créer un stream de travail basé sur Docker sous Windows pour le développement d’applications Node.js.

  1. Au moment du développement, je pourrais exécuter mon application localement dans un conteneur et continuer à voir la dernière version sans trop de problèmes (je ne veux pas reconstruire l’image à chaque fois pour voir la dernière version).

  2. D’un autre côté, quand je déploie en production, je veux que mes fichiers sources soient “cuits” dans l’image du conteneur avec toutes les dépendances ( npm install )

J’ai donc créé deux fichiers Vagrant – un pour le conteneur et un pour son hôte. Voici un extrait de ce dernier:

 Vagrant.configure(2) do |config| config.vm.provider "docker" do |docker| docker.vagrant_vagrantfile = "host/Vagrantfile" # it references the host Vagrantfile docker.build_dir = "." # we have a Dockerfile in the same dir docker.create_args = ['--volume="/usr/src/host:/usr/src/appcontainer:rw"'] end end 

/usr/src/host est un répertoire contenant tout mon code source (sans node_modules ). Lors de la construction du Dockerfile Docker, Docker copie le Dockerfile package.json dans /usr/src/appcontainer et y npm install une npm install qui convient à ma deuxième condition (déploiement en production).

Mais ma première exigence était de changer la source pendant le développement, donc j’ai monté /usr/src/appcontainer tant que volume pointant vers le répertoire hôte /usr/src/host . Cependant, cela ne fonctionne pas, car /usr/src/host n’a pas de dossier node_modules – ce dossier n’existe que dans le conteneur.

Tout ce problème semble facile – changer un fichier sous Windows, voir son changement à la fois sous la machine virtuelle hôte Linux et dans son conteneur et vice-versa … Mais je suis un peu bloqué.

Quelle est la meilleure pratique pour réaliser ce comportement de synchronisation?

Cependant, cela ne fonctionne pas, car / usr / src / host n’a pas de dossier node_modules

Vous pouvez utiliser l’une des approches décrites dans cette question , par exemple en utilisant un volume de données dédié à node_modules .
Ou monter l’hôte node_modules tant que dossier distinct dans le conteneur.