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
Обновление зависимостей
- Обновите локально
requirements.txt. - При необходимости зафиксируйте версии (
pip-compile,pip freeze). - Пересоберите образ:
bash docker compose -f docker-compose-build.yml build --no-cache
Советы
- Для многоплатформенной сборки используйте
docker buildx bake. - Не храните секретный
TOKENв репозитории — поставляйте через CI/CD secrets. - Логика установки системных пакетов расположена в Dockerfile; при добавлении новых библиотек проверьте, нужны ли dev-headers.