@F3ANG

Объяснить инструкции в Dockerfile?

# Отдельный сборочный образ
FROM python:3.9-slim-bullseye as compile-image
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip \
 && pip install --no-cache-dir -r requirements.txt

# Итоговый образ, в котором будет работать бот
FROM python:3.9-slim-bullseye
COPY --from=compile-image /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /app
COPY bot /app/bot
CMD ["python", "-m", "bot"]


Есть такой конфиг Dockerfile`а.
Вопрос, я думаю, не по теме Docker, а, скорее, по Linux.
Да, он глупый, но себе я на него еще не ответил.

Как я рассуждаю:
В строке RUN python -m venv /opt/venv мы создаем виртуальное окружение по пути /opt/venv.
ENV PATH="/opt/venv/bin:$PATH"- здесь мы добавляем путь до директории ранее созданного виртуального окружения с запускаемым файлом activate в переменную окружения PATH.
COPY --from=compile-image /opt/venv /opt/venv - берем результат первой сборки и копируем во вторую.
ENV PATH="/opt/venv/bin:$PATH" - снова добавляем путь в переменную окружения.
WORKDIR /app и COPY bot /app/bot - создаем и копируем в рабочую директорию /app папку bot из локального места сборки образа.

Примечание:
Значение флага -p у python
-m module-name
Searches sys.path for the named module and runs the corresponding .py file as a script.


CMD ["python", "-m", "bot"] - запускаем модуль bot? В примечании сверху сказано 'ищет в PATH заданный модуль и запускает соответствующий файл .py'. Но ведь мы не передавали модуль bot в переменную окружения. Мы не активировали виртуальное окружение.
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
Добавить в PATH путь до виртуального окружения это и есть его активация - после этого будет использоваться интерпретатор из venv
Можешь открыть в текстовом редакторе скрипт /opt/vev/bin/activate и убедиться в этом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы