Ниже приведен пример файла Docker Compose для стека MERN (MongoDB, Express.js, React, Node.js):
version: '3'
services:
mongodb:
image: mongo
ports:
- '27017:27017'
volumes:
- ./data:/data/db
backend:
build:
context: ./backend
dockerfile: Dockerfile
ports:
- '8000:8000'
environment:
- MONGODB_URI=mongodb://mongodb:27017/mydatabase
depends_on:
- mongodb
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- '3000:3000'
environment:
- REACT_APP_API_URL=http://backend:8000/api
depends_on:
- backend
В этом примере мы определяем три службы: mongodb, backendи frontend. Служба mongodbиспользует официальный образ MongoDB и сопоставляет порт контейнера 27017 с портом хоста 27017. Каталог данных также монтируется как том для сохранения данных базы данных.
Служба backendсоздает серверное приложение, используя файл Dockerfile, расположенный в каталоге ./backend. Он предоставляет порт 8000 и устанавливает переменную среды MONGODB_URIдля подключения к службе MongoDB.
Служба frontendсоздает интерфейсное приложение, используя файл Dockerfile, расположенный в каталоге ./frontend. Он предоставляет порт 3000 и устанавливает переменную среды REACT_APP_API_URL, чтобы указать на серверную службу.
Чтобы использовать этот файл Docker Compose, создайте следующую структуру каталогов:
project/
├── backend/
│ ├── Dockerfile
│ └── ... (backend application files)
├── frontend/
│ ├── Dockerfile
│ └── ... (frontend application files)
└── docker-compose.yml
Поместите файл Docker Compose в корневой каталог (в этом примере project/) и замените ...фактическими файлами приложения для серверной и клиентской частей..