JavaRush /Курси /Модуль 2: Fullstack /Налаштування docker-compose.yml для запуску всіх сервісів...

Налаштування docker-compose.yml для запуску всіх сервісів

Модуль 2: Fullstack
Рівень 18 , Лекція 3
Відкрита

4.1 Ініціалізація

На цьому кроці ми налаштуємо файл compose.yaml, щоб запустити всі сервіси нашого багатоконтейнерного застосунку. Файл compose.yaml включатиме налаштування для фронтенду, бекенду та бази даних, а також визначення мереж і томів.

Визначення версії Docker Compose

Почнемо з вказівки версії Docker Compose. У даному прикладі використовується версія 3:

Yaml

version: '3'

4.2 Визначення сервісів

Сервіс 1: Frontend (ReactJS)

Визначимо сервіс для фронтенду, який буде зібраний з директорії frontend і стане доступним на порту 3000:

Yaml

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

Сервіс 2: Backend (Flask)

Визначимо сервіс для бекенду, який буде зібраний з директорії backend. Він залежить від сервісу бази даних і буде доступний на порту 5000:

Yaml

  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. Налаштуємо змінні оточення для створення бази даних і облікових даних користувача:

Yaml

  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 Налаштування мереж і томів

Визначимо мережі та томи, які будуть використовуватися нашими сервісами:

Yaml

networks:
  task-network:
    driver: bridge
      
volumes:
  db-data:

Де:

  • networks: визначає мережу task-network з типом драйвера bridge, яка буде використовуватися для зв'язку між контейнерами.
  • volumes: визначає том db-data для зберігання даних бази даних.

4.4 Повний файл docker-compose.yml

Тепер об'єднаємо всі частини в один файл docker-compose.yml:

Yaml

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 налаштовано, можемо запустити всі сервіси за допомогою однієї команди:

Terminal

docker compose up

Ця команда створить і запустить контейнери для фронтенда, бекенда і бази даних, використовуючи налаштування, визначені у compose.yaml.

Перевірка запуску

Після запуску контейнерів, переконайтеся, що всі сервіси працюють коректно:

  1. Frontend: відкрийте браузер і перейдіть за адресою http://localhost:3000, щоб перевірити роботу фронтенду.
  2. Backend: відкрийте браузер і перейдіть за адресою http://localhost:5000, щоб перевірити роботу бекенду.
  3. Database: переконайтеся, що контейнер бази даних запущений і доступний через мережеву взаємодію з бекендом.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ