#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
папку.