-
Notifications
You must be signed in to change notification settings - Fork 1
Questions generator & validator #446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Чтобы сейчас не тратить своё время на ревью сгенерированного кода в этом PR, предлагаю вам с помощью известных инструментов получить фидбек по файлам в PR
- для примера (и в том числе оценки текущего файла) ниже - ревью по Dockerfile
- ревью по остальным файлам приложите в виде комментариев - вместе изучим
В текущем варианте (в плане чистоты / понятности кода ) PR в проект не попадет
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Этот Dockerfile действительно содержит несколько странных решений и артефактов генерации ИИ. Давайте разберем по пунктам:
Проблемы и странности:
- Бессмысленное многостадийное построение:
FROM base AS app
CMD ["bash", "-lc", "sleep infinity"]
Переопределение только CMD без добавления новых слоев - бессмысленно.
-
Дублирование
FROM base AS init:- Создает отдельный образ только для выполнения одного скрипта
- Можно было сделать в одном образе с разными entrypoints
-
chmod +xв отдельном RUN:RUN chmod +x /usr/local/bin/init-volumes.shЭто действительно антипаттерн. Лучше:
COPY --chmod=755 docker/init-volumes.sh /usr/local/bin/ -
sleep infinityкак CMD:- Для разработки может иметь смысл, но лучше использовать
docker-composeсcommandoverride
- Для разработки может иметь смысл, но лучше использовать
-
Установка
torchотдельно от requirements.txt:RUN pip install --no-cache-dir torch==2.5.1 RUN pip install --no-cache-dir -r requirements.txtСтоило указать torch в requirements.txt
Что можно оставить/исправить:
FROM python:3.10-slim
# Установка системных зависимостей
RUN apt-get update && apt-get install -y --no-install-recommends \
git wget gcc g++ \
libprotobuf-dev protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Лучше объединить переменные окружения
ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_DEFAULT_TIMEOUT=120 \
NLTK_DATA=/nltk_data
# Копируем зависимости
COPY requirements.txt .
# Устанавливаем зависимости одним RUN (кеширование слоев)
RUN pip install --no-cache-dir \
torch==2.5.1 \
-r requirements.txt \
"huggingface_hub[cli]"
# Копируем код
COPY . .
# Для инициализации можно использовать скрипт
COPY --chmod=755 docker/init-volumes.sh /usr/local/bin/
# По умолчанию запускаем приложение, но можем переопределить
CMD ["python", "app.py"] # или ваша команда по умолчанию
Рекомендации:
-
Если нужны разные точки входа (app vs init), лучше:
- Создать скрипты
/usr/local/bin/start-appи/usr/local/bin/init - Или использовать docker-compose для разных конфигураций
- Создать скрипты
-
Для разработки с
sleep infinity:# В docker-compose.yml command: bash -c "sleep infinity" -
Разделение на этапы имело бы смысл, если бы:
- Был этап builder с компиляцией
- Итоговый образ был значительно легче
- Но здесь этого нет
Вывод: Dockerfile явно сгенерирован ИИ без понимания контекста. Лучше переписать с учетом реальных потребностей приложения.
No description provided.