Перейти к содержанию

Python Base Image — сборка monitoring_python_base

Назначение сервиса

build_python_docker_image собирает универсальный Docker-образ monitoring_python_base, содержащий системные пакеты и Python-библиотеки, общие для всех утилит мониторинга (экспортёры, консольные скрипты, Streamlit-приложения).

Использование единого образа сокращает время сборки downstream-проектов и гарантирует согласованные версии зависимостей.


Структура каталогов

config/services/build_python_docker_image/
├─ Dockerfile                # рецепт образа
├─ requirements.txt          # pinned Python deps (pip freeze)
├─ docker-compose-build.yml  # compose-файл только для сборки
└─ .env_example              # TOKEN + REQUIREMENTS_PATH

.env параметры

Переменная Описание
TOKEN Private-Token GitLab/GitHub для скачивания requirements.txt, если он лежит в приватном репо
REQUIREMENTS_PATH Полный URL до raw-файла requirements.txt
COMPOSE_PROJECT_NAME Префикс контейнера (необязательно)

Сборка образа

cd config/services/build_python_docker_image
cp .env_example .env
# укажите TOKEN и REQUIREMENTS_PATH

docker compose -f docker-compose-build.yml build --no-cache

Образ будет доступен локально как monitoring_python_base:latest и может быть запушен в registry:

docker tag monitoring_python_base registry.example.com/monitoring_python_base:1.0.0
docker push registry.example.com/monitoring_python_base:1.0.0

Использование в других сервисах

В любых docker-compose.yml достаточно указать:

services:
  my_exporter:
    image: monitoring_python_base:latest  # или свой registry
    command: python app.py
    volumes:
      - ./src:/app

Обновление зависимостей

  1. Обновите локально requirements.txt.
  2. При необходимости зафиксируйте версии (pip-compile, pip freeze).
  3. Пересоберите образ: bash docker compose -f docker-compose-build.yml build --no-cache

Советы

  • Для многоплатформенной сборки используйте docker buildx bake.
  • Не храните секретный TOKEN в репозитории — поставляйте через CI/CD secrets.
  • Логика установки системных пакетов расположена в Dockerfile; при добавлении новых библиотек проверьте, нужны ли dev-headers.