Как сделать node_modules общий в докер компос?

Для того чтобы сделать папку 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.