4.1 Инициализация
На этом шаге мы настроим файл compose.yaml, чтобы запустить все сервисы нашего многоконтейнерного приложения. Файл compose.yaml будет включать настройки для фронтенда, бекенда и базы данных, а также определение сетей и томов.
Определение версии Docker Compose
Начнем с указания версии Docker Compose. В данном примере используется версия 3:
version: '3'
4.2 Определение сервисов
Сервис 1: Frontend (ReactJS)
Определим сервис для фронтенда, который будет собран из директории frontend и станет доступен на порту 3000:
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Сервис 2: Backend (Flask)
Определим сервис для бекенда, который будет собран из директории backend. Он зависит от сервиса базы данных и будет доступен на порту 5000:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Где:
- depends_on: указывает, что сервис backend зависит от сервиса database. Это означает, что база данных будет запущена перед запуском бекенда.
- environment: настраивает переменные окружения для подключения к базе данных.
Сервис 3: Database (PostgreSQL)
Определим сервис для базы данных, используя официальный образ postgres:13. Настроим переменные окружения для создания базы данных и учетных данных пользователя:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Где:
-
environment: настраивает переменные окружения для создания базы данных и пользователя при запуске контейнера. -
volumes: подключает том db-data для постоянного хранения данных.
4.3 Настройка сетей и томов
Определим сети и тома, которые будут использоваться нашими сервисами:
networks:
task-network:
driver: bridge
volumes:
db-data:
Где:
- networks: определяет сеть
task-networkс типом драйвераbridge, которая будет использоваться для связи между контейнерами. - volumes: определяет том
db-dataдля хранения данных базы данных.
4.4 Полный файл docker-compose.yml
Теперь объединим все части в один файл docker-compose.yml:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Пояснение к настройкам
-
build: указывает путь к директории сDockerfileдля сборки образа. -
ports: открывает порты на хосте для доступа к сервисам. -
depends_on: указывает, что сервис зависит от другого, чтобы обеспечить порядок запуска. -
environment: настраивает переменные окружения для сервисов. -
networks: определяет сеть для связи между контейнерами. -
volumes: определяет тома для постоянного хранения данных.
4.5 Запуск приложения
Теперь, когда файл compose.yaml настроен, мы можем запустить все сервисы с помощью одной команды:
docker compose up
Эта команда создаст и запустит контейнеры для фронтенда, бекенда и базы данных, используя настройки, определенные в compose.yaml.
Проверка запуска
После запуска контейнеров, убедитесь, что все сервисы работают корректно:
- Frontend: откройте браузер и перейдите по адресу http://localhost:3000, чтобы проверить работу фронтенда.
- Backend: откройте браузер и перейдите по адресу http://localhost:5000, чтобы проверить работу бекенда.
- Database: убедитесь, что контейнер базы данных запущен и доступен через сетевое взаимодействие с бекендом.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ