Как настроить мультиконтейнерное решение в Docker + Nginx (nodeproxy)?

Настройка мультиконтейнерного решения с использованием Docker и Nginx (с nodeproxy) в Node.js может быть достигнута следующим образом:

1. Создайте файл Dockerfile для каждого контейнера. Dockerfile представляет собой текстовый файл с инструкциями по сборке образа Docker. В контексте Node.js это может выглядеть примерно так:

# Dockerfile для контейнера Node.js

# Указываем базовый образ
FROM node:12

# Устанавливаем рабочую директорию
WORKDIR /usr/src/app

# Копируем зависимости package.json и package-lock.json
COPY package*.json ./

# Устанавливаем зависимости
RUN npm install

# Копируем исходный код
COPY . .

# Определяем порт, который будет прослушиваться в контейнере
EXPOSE 3000

# Запускаем приложение
CMD ["npm", "start"]

2. Создайте файл docker-compose.yml. docker-compose.yml - это YAML-файл, который описывает структуру и конфигурацию ваших контейнеров Docker.

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - nodeapp1
      - nodeapp2
  nodeapp1:
    build:
      context: ./nodeapp1
      dockerfile: Dockerfile
    ports:
      - 3001:3000
  nodeapp2:
    build:
      context: ./nodeapp2
      dockerfile: Dockerfile
    ports:
      - 3002:3000

3. Создайте папки nginx и conf.d. Папка nginx должна содержать конфигурацию Nginx, a папка conf.d - файлы конфигурации для каждого проксирования.

4. Создайте файл конфигурации Nginx для каждого контейнера. Например, nodeapp1.conf и nodeapp2.conf в папке conf.d. Пример nodeapp1.conf:

server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://nodeapp1:3000;
  }
}

5. В командной строке перейдите в папку с docker-compose.yml и выполните команду docker-compose up. Это запустит ваши контейнеры и настроит Nginx для проксирования запросов.

В результате ваше мультиконтейнерное решение будет запущено с помощью Docker, с использованием Nginx в качестве прокси-сервера для обращения к вашим Node.js-приложениям. Контейнеры nodeapp1 и nodeapp2 будут доступны на портах 3001 и 3002 соответственно, а Nginx будет слушать запросы на порту 80 и проксировать их на соответствующие порты внутри контейнеров.