Совместное использование томов, но перезапись файлов, а не замена всей папки

#node.js #docker

#node.js #docker

Вопрос:

Я пытаюсь настроить образ docker для проекта NodeJS. У него так много зависимостей, и для их настройки требуется много времени. Я хотел бы иметь образ docker со всеми необходимыми библиотеками и даже исходным кодом, который я мог бы легко запускать:

 docker run -it --rm my_image
  

На самом деле, у меня уже есть это. Но проблема в том, что я разрабатываю код, и мне нужно часто копировать код в контейнер. В настоящее время я делаю это с помощью docker cp . Но поскольку файлов много, я надеялся, что смогу использовать что-то вроде volumes вместо этого:

 docker run -it --rm 
    -v $(pwd)/project:/root/project 
    my_image
  

Но это заменит всю папку, и node_modules больше не существует. И я должен снова запустить npm i (что занимает много времени для завершения). Мне было интересно, есть ли способ перезаписать содержимое папки вместо ее замены?

Комментарии:

1. Расположите вещи так, чтобы части, которые должны исходить из изображения, и части, которые должны поступать извне, находились в разных папках. Возможно, использование символических ссылок помогло бы.

2. Я бы предложил использовать локальную среду узла для повседневной разработки. Если код внутри изображения изменится, вам нужно docker build создать новое изображение. Тома не предназначены для кода, и при монтировании тома не выполняется операция «объединить файлы» (она работает так же, как если бы вы монтировали USB-накопитель поверх исходного каталога вашего хоста).

Ответ №1:

В итоге я переместил свой код во вложенную папку и заменил эту папку, смонтировав том:

 docker run -it --rm 
    -v $(pwd)/project/src:/root/project/src 
    my_image
  

Это означало, что я больше не заменяю node_modules папку.