Собери multi-stage Dockerfile под мой стек: рабочий, с маленьким финальным образом и без dev-зависимостей внутри.
Стек: [СТЕК: Python 3.11, FastAPI, зависимости через poetry]
Как стартует: [ЗАПУСК: uvicorn app.main:app --host 0.0.0.0 --port 8000]
Что в образе не нужно: [ЛИШНЕЕ: тесты, линтеры, poetry, .git, кеши сборки]
Где будет крутиться: [СРЕДА: один сервер с docker compose, за nginx, без Kubernetes]
Что нужно:
1. Dockerfile двумя стадиями: сборка зависимостей и runtime. Комментарий над каждой стадией — зачем она.
2. Запуск от пользователя без root и без установки sudo.
3. `HEALTHCHECK` с реальной проверкой приложения, а не `curl localhost`, который вернёт 200 на любом ответе.
4. `.dockerignore` отдельным блоком.
5. Размер: назови ожидаемый вес финального образа и на чём именно он экономится по сравнению
с однослойной сборкой.
Отсечка. Не тащи alpine ради размера, если стек на Python с бинарными зависимостями: musl ломает
колёса numpy и psycopg, сборка вырастает в разы и падает на pandas — тогда slim честнее. Не копируй
весь контекст `COPY . .` первым слоем: кеш зависимостей после этого не работает никогда.
Не оставляй `latest` в базовом образе. Не добавляй в финальный образ компилятор ради одной библиотеки —
собери колесо в builder-стадии.
Проверка перед выдачей: пройди по финальной стадии и для каждой строки скажи, попадёт ли в образ то,
что перечислено в поле ЛИШНЕЕ. Если попадает — перепиши.
Собрать под себя — поля заполнены рабочими значениями, меняйте их и промпт выше обновится сам