Какова цель запуска приложения django в virtualenv внутри контейнера докеров?

Какова цель virtualenv внутри приложения dockang docker? Python и другие зависимости уже установлены, но в то же время необходимо установить множество пакетов с помощью pip, поэтому кажется, что конфликт все еще неясен.

Не могли бы вы объяснить эту концепцию?

EDIT: Также, например. Я создал virtualenv внутри приложения docker docker и недавно установил pip freeze djangorestframework и добавил его к установленному в settings.py, но docker-compose up вызывает ошибку . No module named rest_framework. . No module named rest_framework. Проверено, все правильно . Докер / виртуальный конфликт? Может быть?

Докер и контейнеризация могут вдохновить иллюзию того, что вам не нужна виртуальная среда. distpyil's Glpyh делает очень убедительный аргумент против этого заблуждения в этом разговоре о пирогах .

Те же основные аспекты преимуществ virtualenv применимы к контейнеру, как и для неконтейнерного приложения, потому что в основном вы все еще используете дистрибутив Linux.

Debian и Red Hat – фантастически сложные инженерные проекты. Интегрирование миллиардов строк кода C. Например, вы можете просто apt install libavcodec . Или yum install ffmpeg .

Написание рабочей системы сборки для одной из этих вещей является кандидатской диссертацией. Они объединяют тысячи пакетов Python одновременно в одну рабочую среду. Они не всегда говорят вам, используют ли их инструменты Python или нет.

Итак, вы можете захотеть, чтобы docker выполнил некоторые инструменты внутри контейнера, они могут быть написаны на Python, если вы sudo pip install ваше приложение там, теперь все сломано .

Поэтому даже в контейнерах изолируйте свой код приложения от системы

Независимо от того, используете ли вы докер или нет, вы всегда должны запускать приложение в виртуальной среде.

Теперь в докеров, в частности, с использованием virtualenv, немного сложнее, чем должно быть. Внутри докера каждая команда RUN выполняется изолированно, и никакие состояния, кроме изменений файловой системы, не сохраняются от строки к строке. Чтобы установить на virutalenv вы должны добавить команду активации в каждую строку :

 RUN apt-get install -y python-virtualenv RUN virtualenv /appenv RUN . /appenv/bin/activate; \ pip install -r requirements.txt ENTRYPOINT . /appenv/bin/activate; \ run-the-app 

Виртуализм существует для изоляции пакетов в определенной среде. Docker также позволяет изолировать настройки к определенной среде. Таким образом, по сути, если вы используете докер, не так много пользы от использования virtualenv.

Просто попробуйте установить предмет в среду докера, это не повредит. Чтобы установить pip, используйте файл docker, где вы можете выполнять команды.

Ниже приведен пример псевдокода.

 FROM /path/to/used/docker/image RUN pip install -r requirements.txt