Дані та аналітика

Docker для Python та проєктів з даними: Практичний посібник

H

https://www.facebook.com/kdnuggets

5 хв читання

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

Вступ

Розробка на 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 Guide

16 квітня 2026

Оригінал

Попередні статті

Візуалізація двох конкуруючих моделей кодування, OpenAI Codex та Anthropic Claude Code, представлених абстрактними мережами коду, що взаємодіють у цифровому середовищі.
21 травня 2026Штучний інтелект

Оптимізація OpenAI Codex: Досвід та Порівняння з Claude Code

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

Футуристичний центр обробки даних, де абстрактні потоки даних взаємодіють з ефірними фігурами агентів ШІ, символізуючи автоматизацію та нову роль інженерії даних.
21 травня 2026Дані та аналітика

Інженерія даних у 2026 році: Еволюція під впливом агентів ШІ

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

Ілюстрація, що зображує мережу блокчейнів з виділеними червоним кольором вузлами, що символізують незаконну діяльність, та захисний щит або збільшувальне скло, що накладається на мережу, підкреслюючи інтелект та безпеку.
21 травня 2026Дані та аналітика

Інженерія даних TRM: Як блокчейн-інтелект бореться з фінансовими злочинами

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

Наступні статті

Журналіст переглядає дані на екрані, поруч з ним абстрактне зображення штучного інтелекту, що символізує обробку інформації та співпрацю в розслідувальній журналістиці.
21 травня 2026Штучний інтелект

Як AI-агенти з кодуванням можуть покращити журналістські розслідування: Дослідження Claude Code

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

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

«Вайб-кодування» спричиняє тисячі вразливостей у безпеці даних, – дослідження

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

Схематичне зображення, що показує, як штучний інтелект спрощує складні та заплутані конвеєри даних, перетворюючи їх на уніфікований та впорядкований потік.
21 травня 2026Штучний інтелект

Як ШІ трансформує інженерію даних: від рутини до прориву

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