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: переконайтеся, що контейнер бази даних запущений і доступний через мережеву взаємодію з бекендом.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ