1 of 21

Веб-орієнтовані системи і технології

Лекція 2. Практична частина

Робота з БД в Docker

2 of 21

На попередній лекції розглянули:

  • Вступ до розробки веб-орієнтованих інформаційних систем
  • Поняття контейнеризації і контейнерів, їх особливості і переваги використання по відношення до віртуальних машин
  • Основи роботи з Докер: стандартні команди, поняття образу, контейнера, реєстра докер

3 of 21

Питання, що вивчатимуться в даній лекції

  • Практична частина: створення простого контейнеризованого застосунку
  • Створення і використання змінних оточення
  • Підключення бази даних
  • Створення сервісу з MongoDB
  • Здійснення запитів в базу даних
  • Використання томів (volumes) для постійного зберігання даних
  • Команди docker volume
  • Робота з volumes в docker-compose
  • Конфігурація docker-compose-development.yml для версії розробки

4 of 21

Практична частина

  • Створення API-застосунку
  • Створення Dockerfile
  • Побудова образу Docker
  • Налаштування і запуск API сервісу
  • Створення і використання змінних оточення

5 of 21

Установка інструментів

  • Установити Docker Desktop
  • Перевірити виконання команд docker, docker-compose:
    • docker --help (--version)
    • docker-compose --help (--version)

6 of 21

Використання Dockerfile для створення і запуску образу Docker. Контейнеризація NodeJS-застосунку

Мета роботи: отримати знання про розгортання та запуску NodeJS-застосунку в режимі розробки у Docker-контейнері.

Передумови: встановлений Docker і базове розуміння структури NodeJS-застосунку.

Адреса репозиторію для клонування:

https://gitlab.com/web-systems-docker/docker-nodejs-app-lab1

7 of 21

Хід роботи

  1. Створіть новий проект в середовищі розробки HelloDocker
  2. Здійсніть клонування репозиторію з простим NodeJS-застосунком:

git clone <repository_url> api

8 of 21

Хід роботи

3. Створіть файл Dockerfile із такими директивами для створення образу:

# базовий образ, основа нашого образу

FROM node:20-alpine3.17

# створення робочої папки застосунку

WORKDIR /usr/src/app

# копіювання package.json та встановлення залежностей

COPY package*.json ./

RUN npm install

# копіюємо вихідний код в робочу папку

COPY . .

# повідомляємо Docker, що в контейнері є застосунок, що прослуховує даний порт

EXPOSE 3001

# реєструємо команду для необхідності запуску застосунку при запуску контейнера

CMD [ "npm", "start" ]

9 of 21

Хід роботи

4. Створіть файл .dockerignore для запобігання копіювання локальних папок і файлів в Docker-образ:

node_modules

.idea

npm-debug.log

5. Побудуємо образ:

docker build . -t <your username>/nodejs-api-app

# переконаємось, що образ побудований

docker image ls

6. Запустимо застосунок:

docker run -p 3001:3001 -d <your username>/nodejs-docker-lab01

7. Зупинимо:

docker ps

docker stop <container_id>

10 of 21

Використання Docker Compose

Мета роботи: створити маніфест docker-compose.yml та односервісний застосунок. Налаштувати і запустити API-сервіс. Створити і використати змінну оточення.

Передумови: встановлений Docker Compose. Для перевірки можна виконати команду docker compose --version

11 of 21

Хід роботи

  1. В кореневій папці проекту створіть файл docker-compose.yml з таким вмістом:

version: "3"

services:

api:

build: ./api

command: npm start

ports:

- "3001:3001"

environment:

- PORT=3001

- HOST=localhost

12 of 21

Хід роботи

2. Виконайте побудову котейнеризованого застосунку і його запуск:

docker compose up -d

3. Якщо потрібно перебудувати застосунок (після внесення змін в коді наприклад) і запустити, виконуємо команду:

docker-compose up --build -d

4. Перегляньте список працюючих контейнерів:

docker ps

5. Для зупинки контейнерів виконуємо команду:

docker compose stop

6. Для зупинки і видалення контейнерів виконуємо команду:

docker compose down

13 of 21

Хід роботи

Використання змінних оточення в коді застосунку:

const PORT = process.env.PORT;

const HOST = process.env.HOST;

14 of 21

Змінні оточення

  • Такі змінні містять інформацію, що можуть використовувати виконавчі файли програм. Наприклад, порт, налаштування БД, конфігурація поштового серверу тощо.
  • Для створення змінних оточення в docker-compose.yml в конфігурації даного сервісу потрібно записати:

15 of 21

Використання змінних оточення

  • Для доступу до змінних оточення в коді, використовуємо об’єкт process.env

16 of 21

Підготовка до роботи з БД

  • MongoDB – нереляційна база даних
  • Mongoose – модуль для роботи з БД
  • Встановити Mongoose – npm install mongoose
  • Перевірити package.json:

17 of 21

Підключення до БД

  • Виносимо конфігурацію в окремий файл configuration/index:

  • Функцію для з'єднання з БД винесемо в окремий файл:

18 of 21

Підключення до БД (продовження)

  • Підключаємо конфігурацію
  • Коннектимось до БД
  • При успішному з'єднанні запускаємо сервер

19 of 21

Додаємо новий сервіс для роботи БД

  • Нам не потрібно будувати новий образ, а лише використати існуючий (з mongoDB)
  • Сервіс api запустити лише після запуску api_db
  • В змінній оточення MONGO_URL використати адресу сервісу api_db

20 of 21

Створення моделі даних

  • src/models/user.js

21 of 21

Перевірка запитів в БД

  • Підключаємо модель даних в додаток
  • Здійснюємо запити в БД