Для того чтобы сделать папку node_modules общей в Docker Compose, можно использовать тома (volumes) для монтирования директории в контейнер.
Сначала, создайте файл docker-compose.yml, в котором опишите сервисы, которые хотите запустить. Например:
version: '3' services: app: build: . volumes: - ./app:/app - /app/node_modules
В приведенном примере у нас есть сервис app
, который строится из текущей директории .
и монтирует папку ./app
внутри контейнера по пути /app
. Также мы монтируем папку /app/node_modules
как отдельный том.
Далее, создайте Dockerfile в той же директории, что и docker-compose.yml, со следующим содержимым:
FROM node:14-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "index.js"]
Dockerfile определяет образ, который будет использоваться для создания контейнера. Мы используем официальный образ Node.js версии 14 на базе Alpine Linux и устанавливаем зависимости с помощью npm install. Затем копируем все файлы в текущей директории (включая package.json) внутрь контейнера.
Для использования этой конфигурации, выполните команду docker-compose up
в терминале в той же директории, где находятся файлы docker-compose.yml и Dockerfile.
Теперь, при запуске контейнера, папка node_modules будет создана внутри контейнера и будет доступна для чтения и записи. Изменения, внесенные в node_modules внутри контейнера, будут также видны на хостовой машине и наоборот.
Таким образом, мы сделали папку node_modules общей между контейнером и хостовой машиной с помощью тома. Это позволяет избежать лишних операций по установке зависимостей при каждом запуске контейнера и обеспечивает более быструю и эффективную разработку с использованием Docker.