Большинство фиксирует версии в Dockerfile:
FROM python:3.12
RUN pip install fastapi==0.115.0
а потом случайно ломают прод, используя в entrypoint что-то вроде:
pip install -U some-lib
или
apt-get update && apt-get install -y curl
Это приводит к ситуации, когда:
staging и prod внезапно начинают отличаться,
контейнеры становятся «недетерминированными»,
одна и та же сборка ведёт себя по-разному в разные дни,
CI/CD перестаёт быть повторяемым.
✔️ Правило, которое нужно запомнить
Если хочешь предсказуемые окружения — фиксируй версии везде, где идёт установка:
в Dockerfile, в entrypoint, в билд-скриптах, в helm-chart, в init-containers.
✔️ Лучший вариант:
никаких apt-get update в рантайме
никаких pip install -U внутри контейнера
все зависимости устанавливаются только на этапе build
все версии – через lock-файлы
Таким образом ты превращаешь свой environment в чистый, детерминированный, воспроизводимый артефакт.