Files
learn-devops/docker/uv/Dockerfile.pip
github-actions[bot] 0fc651fefe uv 0.5 (#34)
Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
2025-01-14 12:06:30 +03:00

41 lines
1.6 KiB
Docker

# Базовый образ
FROM python:3.13-alpine
# Устанавливаем переменные окружения
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
WORKDIR_PATH="/app" \
VENV_PATH="/opt/venv"
# Определяем аргументы для пользователя и группы
ARG USERNAME=appuser
ARG GROUPNAME=appgroup
# Создаем пользователя и рабочую директорию
RUN addgroup --system ${GROUPNAME} \
&& adduser --system --ingroup ${GROUPNAME} ${USERNAME} \
&& mkdir -p ${WORKDIR_PATH} ${VENV_PATH} \
&& chown -R ${USERNAME}:${GROUPNAME} ${WORKDIR_PATH} ${VENV_PATH}
# Устанавливаем рабочую директорию
WORKDIR ${WORKDIR_PATH}
# Создаем виртуальное окружение и настраиваем PATH
RUN python -m venv ${VENV_PATH}
ENV PATH="${VENV_PATH}/bin:$PATH"
# Копируем requirements, устанавливаем зависимости в venv и устанавливаем права
COPY --chown=${USERNAME}:${GROUPNAME} ./requirements.txt ./requirements.txt
RUN pip install --no-cache --require-hashes -r ./requirements.txt \
&& chown -R ${USERNAME}:${GROUPNAME} ${VENV_PATH}
# Копируем остальные файлы приложения
COPY --chown=${USERNAME}:${GROUPNAME} ./ ./
# Запускаем контейнер от имени нового пользователя
USER ${USERNAME}:${GROUPNAME}
# Настраиваем команду запуска
ENTRYPOINT ["uvicorn", "main:app"]
CMD [ "--host", "0.0.0.0", "--port", "8000" ]