Лабораторна робота №6. Docker compose
https://github.com/lisnayk/conteinirization-2023/blob/master/labs/lab6.md
Мета: Ознайомитися з основними можливостями docker compose.
Теоритичні відомості
Pеальні додатки мають окремий контейнер для кожної своєї служби. Це означає, що доведеться створити велику кількість Docker-файлів і потім окремо керувати кожним контейнером, що є громіздким процесом. docker-compose — інструмент, що допомагає визначати та запускати багатоконтейнерні додатки. Docker Compose дозволяє запускати та зупиняти всі служби простими командами за допомогою одного YAML-файлу для кожної конфігурації.
Основна структура файлу docker-compose.yml виглядає наступним чином:
version: '3.8' # Визначає версію Docker Compose (рекомендується використовувати актуальну)
services: # Визначає сервіси, тобто контейнери, що будуть запущені
app: # Ім'я сервісу (контейнера)
image: node:14 # Базовий образ Docker для сервісу (наприклад, Node.js)
volumes: # Зв'язування томів для зберігання даних
- .:/app # Локальна директорія зв'язується з директорією в контейнері
ports: # Відкриті порти для доступу до сервісу
- "3000:3000"
environment: # Змінні середовища для контейнера
- NODE_ENV=development
depends_on: # Вказує на залежність від іншого сервісу
- db
db: # Ім'я другого сервісу (наприклад, база даних)
image: postgres:13 # Використовуваний образ PostgreSQL
volumes:
- pgdata:/var/lib/postgresql/data # Том для зберігання даних бази
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydatabase
volumes: # Описує томи для постійного зберігання даних
pgdata:
Основні команди для керування Docker Compose:
Команда | Опис |
---|---|
docker-compose up |
Запускає всі сервіси, визначені у файлі docker-compose.yml . |
docker-compose up -d |
Запускає сервіси у фоновому режимі (detached mode). |
docker-compose down |
Зупиняє всі сервіси та видаляє контейнери, мережі та томи, створені docker-compose . |
docker-compose build |
Створює або оновлює образи для сервісів на основі Dockerfile, визначених у docker-compose . |
docker-compose stop |
Зупиняє всі або зазначені сервіси, не видаляючи їх. |
docker-compose start |
Запускає всі або зазначені сервіси, які були зупинені. |
docker-compose restart |
Перезапускає всі або зазначені сервіси. |
docker-compose ps |
Показує статус запущених контейнерів у проєкті docker-compose . |
docker-compose logs |
Відображає журнали всіх або зазначених сервісів. |
docker-compose exec <service> <command> |
Виконує команду в запущеному контейнері зазначеного сервісу. |
docker-compose pull |
Завантажує останні версії образів, визначених у docker-compose.yml . |
docker-compose rm |
Видаляє зупинені контейнери, які були створені docker-compose . |
docker-compose config |
Перевіряє файл docker-compose.yml на помилки синтаксису та відображає фінальну конфігурацію. |
docker-compose kill |
Примусово зупиняє всі або зазначені сервіси. |
Можливостей Docker Compose:
- Усі служби ізольовані та працюють на одному хості.
- Контейнери перезапускаються лише при зміні.
- Дані в об'ємах зберігаються при створенні нових контейнерів.
- Переміщення змінних та композиції між середовищами.
- Створюється віртуальна мережа для зручної взаємодії в межах середовищ.
Переваги Docker Compose
- Просте керування багатоконтейнерними додатками: Спрощує процес керування кількома контейнерами.
- Послідовність середовищ: Забезпечує узгодженість середовищ розробки, тестування та продакшну.
- Автоматизація: Легко налаштовує та зупиняє багатоконтейнерні середовища.
- Ефективне керування ресурсами: Підвищує продуктивність додатка та масштабованість.
Недоліки Docker Compose
- Обмежена масштабованість: Не підходить для великих і складних розгортань.
- Підтримка тільки одного хоста: Працює лише на одному хості.
- Базове балансування навантаження: Відсутні розширені функції балансування навантаження.
- Мінімальні можливості моніторингу: Немає вбудованих можливостей для моніторингу.
Завдання
- Ознайомитися з теоритичним матеріалом.
- Завантажити та проагналізувати додатоки у директорій templates/lab6
- Створити docker-compose.yml файл для запуску сервісів наведених у таблиці 1 та зображены на рис 1.
Таблиця 1
Service Name | Image | Ports | Environment Variables | Description | |
---|---|---|---|---|---|
certboot | itzg/openssl-ubuntu | - | CERT_GEN_COMMAND | сервіс, який генерує сертифікати вебсервера й зберігає їх у папці certs виконуючи команду CERT_GEN_COMMAND з .env файлу | |
frontend-build | node:20 | - | VITE_ARTICLES_URL, VITE_USERS_URL | сервіс, який виконую билд VueJS додатку допомогою команди npm run build:all та очикую пареметри середовища VITE_ARTICLES_URL та VITE_USERS_URL значення яких знаходиться в .env файлі. | |
web | nginx:latest | 80, 443 | - | сервіс, який відкриває порт 80 та 443, обслуговую запити до VueJs додатку, виступаэ revers-proxy сервером для запитиів на /api/users та /api/articles, отримуэ конфігурації з файлу ./nginx/nginx.conf. | |
python-app | custom dockerfile based on python:3.8 | 5000 | - | сервіс, який запускає Flask додаток, відповідає на запити /api/articles | |
php-app | webdevops/php-apache:7.4 | 8080 | WEB_DOCUMENT_ROOT=/app, DB_HOST, DB_NAME, DB_USER, DB_PASS | сервіс, який запускає PHP додаток, відповідає на запити /api/users, приймаэ параметри середовища для підключення до сервісу баз даних. | |
mysql | mysql:latest | 3306 | MYSQL_ROOT_PASSWORD | сервіс, який запускає MySQL базу даних використовуючи скрипт ініціалізації бази даних. |
- Оновити інформацію про себе у сервісі frontend.
- Запустити сервіси за допомогою команди
docker-compose up -d
. - Перевірити роботу сервісів в браузері. У разі успішної конфігурації результат буде аналогічним рис. 2.
- Зупинити сервіси за допомогою команди
docker-compose down
. - Всі команди та результати виконання відобразити у звті.
Рисунок 1. Архітектура додатку
Рисунок 2. Результат роботи додатку
Контрольні питання
- Що таке docker-compose і для чого він використовується?
- Яка структура файлу docker-compose.yml і які основні секції він містить?
- Як запустити всі сервіси, визначені у файлі docker-compose.yml, у фоновому режимі?
- Чим відрізняються команди docker-compose up та docker-compose start?
- Як зупинити всі сервіси та видалити контейнери, мережі та томи, створені docker-compose?
- Як створити та оновити образи для всіх сервісів, використовуючи docker-compose?
- Як переглянути статус і список усіх запущених контейнерів у проєкті docker-compose?
- Для чого використовується секція networks у файлі docker-compose.yml?
- Як за допомогою docker-compose виконати команду всередині запущеного контейнера сервісу?
- Як змусити docker-compose перевірити файл конфігурації на синтаксичні помилки?
- Як видалити всі зупинені контейнери, створені за допомогою docker-compose?