Files
learn-devops/docker/uv/Dockerfile
github-actions[bot] 0c4f496270 uv 0.5.14 (#33)
* uv 0.5.14

* Update requirements

---------

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
2025-01-03 09:41:36 +03:00

44 lines
1.8 KiB
Docker

# Базовый образ
FROM python:3.13.1-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}
# Копируем uv чрезвычайно быстрый менеджер пакетов и проектов Python
COPY --from=ghcr.io/astral-sh/uv:0.5.14 /uv /uvx /bin/
# Создаем виртуальное окружение и настраиваем PATH
RUN uv venv ${VENV_PATH}
ENV PATH="${VENV_PATH}/bin:$PATH"
# Копируем requirements, устанавливаем зависимости в venv и устанавливаем права
COPY --chown=${USERNAME}:${GROUPNAME} ./requirements.txt ./requirements.txt
RUN uv pip install --no-cache --require-hashes --requirements ./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" ]