
Вступ
Розробка на Python та проєкти з даними часто стикаються з проблемою залежностей. Різні версії Python, віртуальні середовища, системні пакети та відмінності операційних систем можуть ускладнити запуск чужого коду. Docker вирішує цю проблему, упаковуючи ваш код та все його оточення — версію Python, залежності, системні бібліотеки — в єдиний артефакт, який називається "образом" (image). З цього образу можна запускати контейнери, які працюють ідентично на вашому ноутбуці, машині колеги та хмарному сервері. Це дозволяє зосередитися на розробці, а не на налагодженні середовищ.
Цей матеріал розглядає Docker через практичні приклади, орієнтовані на проєкти з даними.
Необхідні умови
Перед роботою з прикладами вам знадобиться:
- Встановлені Docker та Docker Compose для вашої операційної системи.
- Знайомство з командним рядком та Python.
- Знайомство з написанням Dockerfile, створенням образу та запуском контейнера з цього образу.
Глибокі знання Docker не потрібні, оскільки кожен приклад пояснює, що відбувається.
Контейнеризація Python-скрипта із зафіксованими залежностями
Одним з найпоширеніших випадків використання є контейнеризація Python-скрипта з файлом requirements.txt для забезпечення надійного запуску будь-де. Приклад демонструє скрипт очищення даних, який читає CSV-файл, видаляє дублікати, заповнює пропущені значення та записує очищену версію на диск.
Фіксація залежностей:
Важливо фіксувати точні версії залежностей у requirements.txt (наприклад, pandas==2.2.0), щоб гарантувати однакову поведінку на різних машинах.
Визначення Dockerfile:
Dockerfile для цього скрипта використовує базовий образ python:3.11-slim для зменшення розміру. Важливою оптимізацією є копіювання requirements.txt та встановлення залежностей перед копіюванням основного коду. Це дозволяє Docker кешувати шар залежностей, прискорюючи подальші збірки, якщо змінюється лише код скрипта.
Збірка та запуск:
Образ збирається за допомогою docker build -t data-cleaner .. Запуск контейнера здійснюється командою docker run --rm -v $(pwd)/data:/app/data data-cleaner. Флаг -v монтує локальну папку з даними в контейнер, дозволяючи скрипту читати вхідні дані та записувати очищені результати назад на локальну машину. Флаг --rm автоматично видаляє контейнер після завершення роботи.
Розгортання моделі машинного навчання за допомогою FastAPI
Якщо ви хочете зробити навчену модель доступною через HTTP, FastAPI є чудовим вибором. Він швидкий, легкий і обробляє перевірку вхідних даних за допомогою Pydantic.
Структура проєкту та додаток:
Проєкт розділяє артефакт моделі (model.pkl) від коду програми (app.py). Додаток завантажує модель один раз під час запуску та надає ендпоінт /predict для отримання прогнозів. Клас PredictRequest забезпечує валідацію вхідних даних. Ендпоінт /health є важливим для перевірки готовності сервісу.
Визначення Dockerfile:
Dockerfile для цього випадку вбудовує файл model.pkl безпосередньо в образ, роблячи контейнер повністю самодостатнім. Команда CMD запускає Uvicorn, який слухає на всіх мережевих інтерфейсах контейнера (--host 0.0.0.0), щоб API був доступний ззовні.
Збірка та запуск:
Образ збирається за допомогою docker build -t ml-api .. Запуск контейнера здійснюється командою docker run --rm -p 8000:8000 ml-api, де -p мапує порт контейнера на порт хоста.
Створення багатосервісного пайплайну за допомогою Docker Compose
Реальні проєкти з даними часто включають кілька процесів, таких як база даних, скрипт завантаження даних та дашборд. Docker Compose дозволяє визначати та запускати кілька контейнерів як єдину програму. Кожен сервіс працює у власному контейнері, але вони спільно використовують приватну мережу для взаємодії.
Визначення файлу Compose:
Файл docker-compose.yml оголошує всі сервіси (наприклад, db, loader, dashboard) та налаштовує їхню взаємодію. Сервіси можуть звертатися один до одного за назвою сервісу (наприклад, db:5432). Важливим є використання healthcheck для PostgreSQL, який гарантує, що база даних готова приймати з'єднання, перш ніж залежні сервіси спробують підключитися. Опція depends_on з condition: service_healthy використовує цей механізм. Томи (наприклад, pgdata) використовуються для збереження даних бази даних між запусками.
Запуск:
Всі сервіси запускаються однією командою: docker compose up --build.
Планування завдань за допомогою Cron-контейнера
Для скриптів, які потрібно запускати за розкладом (наприклад, щогодини), можна використовувати cron-контейнер без необхідності налаштування повноцінної системи оркестрації, як Airflow.
Структура проєкту та скрипт:
Проєкт включає Dockerfile, скрипт fetch_data.py та файл crontab, який визначає розклад. Скрипт fetch_data.py використовує requests для отримання даних з API та зберігає їх у CSV-файл.
Визначення Crontab:
Файл crontab містить розклад (наприклад, 0 * * * * python /app/fetch_data.py >> /var/log/fetch.log 2>&1), який перенаправляє стандартний вивід та вивід помилок у лог-файл для подальшого аналізу.
Визначення Dockerfile:
Dockerfile встановлює cron, копіює та реєструє файл crontab. Команда CMD ["cron", "-f"] запускає cron у фоновому режимі, що необхідно для підтримки життєдіяльності контейнера Docker.
Збірка та запуск:
Образ збирається за допомогою docker build -t data-fetcher .. Контейнер запускається в відокремленому режимі: docker run -d --name fetcher -v $(pwd)/output:/app/output data-fetcher. Локальна папка output монтується в контейнер, щоб збережені CSV-файли потрапляли на локальну файлову систему.
Коли використовувати Docker
Docker є гарним рішенням, коли:
- Вам потрібні відтворювані середовища на різних машинах або для членів команди.
- Ви ділитеся скриптами або моделями, які мають специфічні вимоги до залежностей.
- Ви створюєте багатосервісні системи, які повинні надійно працювати разом.
- Ви хочете розгорнути застосунок будь-де без проблем з налаштуванням.
Коли Docker може бути надмірним
Docker, ймовірно, є надмірним, коли:
- Ви проводите швидкий, дослідницький аналіз лише для себе.
- Ваш скрипт не має зовнішніх залежностей, крім стандартної бібліотеки.
- Ви перебуваєте на ранній стадії проєкту, і ваші вимоги швидко змінюються.
Що це означає для розробників
Docker дозволяє розробникам Python та спеціалістам з даних вирішувати проблеми залежностей та забезпечувати відтворюваність середовищ. Це спрощує розгортання скриптів, моделей машинного навчання та складних багатосервісних систем, зменшуючи час на налагодження оточення.
Ключові факти
-
Docker вирішує проблеми залежностей у Python-проєктах, упаковуючи код та його оточення в "образ".
-
Контейнери, запущені з образу, працюють ідентично на різних машинах.
-
Матеріал охоплює контейнеризацію скриптів, розгортання ML-моделей з FastAPI, багатосервісні пайплайни з Docker Compose та планування завдань з cron-контейнерами.
-
Використання
python:3.11-slimта оптимізований порядок копіювання файлів у Dockerfile зменшують розмір образу та прискорюють збірку. -
Docker Compose дозволяє керувати кількома контейнерами як єдиною програмою, забезпечуючи їхню взаємодію через приватну мережу.
Джерела
Джерело
KDnuggetshttps://www.facebook.com/kdnuggets
Docker for Python & Data Projects: A Beginner's Guide16 квітня 2026
Попередні статті

Оптимізація OpenAI Codex: Досвід та Порівняння з Claude Code
Автор ділиться досвідом використання OpenAI Codex для просунутих завдань кодування, порівнює його з Anthropic Claude Code та розкриває техніки для підвищення продуктивності.

Інженерія даних у 2026 році: Еволюція під впливом агентів ШІ
У 2026 році інженерія даних переживає подвійну трансформацію: до більшої автоматизації завдяки агентам ШІ та посиленого контролю. Це вимагає переосмислення архітектур та процесів.

Інженерія даних TRM: Як блокчейн-інтелект бореться з фінансовими злочинами
TRM Labs використовує інженерію даних для створення платформи блокчейн-інтелекту, що допомагає фінансовим установам та урядовим агенціям виявляти та розслідувати криптозлочини. У 2025 році платформа значно розширила покриття блокчейнів та впровадила нові продукти.
Наступні статті

Як AI-агенти з кодуванням можуть покращити журналістські розслідування: Дослідження Claude Code
Нове дослідження демонструє, як агенти зі штучним інтелектом, зокрема Claude Code, можуть відтворювати складні журналістські розслідування, забезпечуючи прозорість та точність завдяки використанню спеціальних «навичок».

«Вайб-кодування» спричиняє тисячі вразливостей у безпеці даних, – дослідження
Нове дослідження кібербезпекової фірми RedAccess виявило, що тисячі веб-додатків, створених за допомогою інструментів «вайб-кодування» на основі ШІ, мають серйозні проблеми з безпекою, наражаючи на ризик конфіденційні дані.

Як ШІ трансформує інженерію даних: від рутини до прориву
Штучний інтелект змінює інженерію даних, допомагаючи командам подолати брак навичок та складність традиційних ETL-процесів завдяки декларативному підходу та уніфікованим платформам.