31. (П15) Розгортання Flask REST API у Docker: створення Dockerfile¶
Передумови¶
- Прочитана Лекція 30 — Контейнеризація Flask-застосунків за допомогою Docker
- Прочитані лекції 11 — Вступ до Docker та 12 — Dockerfile
- Встановлений Docker
Персоналізація
Застосунок повинен містити ваше ім'я та прізвище у відповідях API. Тег Docker-образу повинен містити ваше прізвище (латиницею). На скріншотах у звіті повинно бути видно ваше ім'я у відповідях curl.
Завдання¶
Створити персоналізований Flask REST API, запакувати його в Docker-образ та продемонструвати роботу контейнера.
Частина 1: Створення Flask API¶
Створити директорію проєкту:
Файл requirements.txt¶
Файл app.py¶
Написати Flask-застосунок з такими ендпоінтами:
1. GET / — привітання з вашим ім'ям:
2. GET /health — перевірка стану:
3. GET /api/student — інформація про студента:
Повертає JSON з вашими даними:
4. GET /api/courses — список курсів:
Повертає масив з 3-5 курсами (назви довільні):
{
"student": "Тарас Шевченко",
"courses": [
{"id": 1, "name": "Python програмування"},
{"id": 2, "name": "Бази даних"},
{"id": 3, "name": "Веб-розробка"}
]
}
5. GET /api/courses/<id> — окремий курс за ID:
Якщо курс не знайдено — повернути статус 404:
Підказка
Курси можна зберігати у звичайному списку Python — база даних не потрібна.
Важливо: Flask повинен слухати 0.0.0.0 (пояснення чому — в лекції 30).
Частина 2: Dockerfile, збірка та запуск¶
Написати Dockerfile та зібрати Docker-образ для застосунку. Як саме написати Dockerfile — дивіться лекцію 30.
Збірка образу¶
Зібрати образ з тегом, що містить ваше прізвище:
Перевірити створений образ:
Запуск контейнера¶
Тестування всіх ендпоінтів¶
Перевірити кожен ендпоінт через curl:
# Привітання
curl http://localhost:5000/
# Здоров'я
curl http://localhost:5000/health
# Інформація про студента
curl http://localhost:5000/api/student
# Список курсів
curl http://localhost:5000/api/courses
# Окремий курс
curl http://localhost:5000/api/courses/1
# Неіснуючий курс (має повернути 404)
curl http://localhost:5000/api/courses/999
Перегляд логів¶
# Переглянути логи контейнера
docker logs my-api
# Стежити за логами в реальному часі та надіслати кілька запитів
docker logs -f my-api
Частина 4: Перезбірка після змін¶
Продемонструвати, що зміни в коді вимагають перезбірки образу:
- Додати ще один курс у список курсів в
app.py - Перезібрати образ з тегом
2.0:
- Зупинити та видалити старий контейнер:
- Запустити новий контейнер з образу
2.0:
- Перевірити, що новий курс з'явився:
Частина 5: Запуск на іншому порті¶
Запустити другий контейнер на іншому порті та перевірити, що обидва працюють:
# Другий контейнер на порті 8080
docker run -d --name my-api-2 -p 8080:5000 shevchenko-flask-api:2.0
# Перевірити обидва
curl http://localhost:5000/api/student
curl http://localhost:8080/api/student
Завершення¶
Зупинити та видалити всі контейнери:
Результат¶
Після виконання роботи студент здає звіт зі скріншотами:
- Вміст файлів
app.pyтаDockerfile - Збірка образу (
docker build) - Результати
curlдля кожного ендпоінту (у відповідях видно ваше ім'я) - Результат
curlдля неіснуючого курсу (статус 404) - Логи контейнера (
docker logs) - Перезбірка образу з тегом
2.0та перевірка змін - Два контейнери на різних портах (
docker psз обома контейнерами)
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub