Почему люди создают virtualenv в контейнере докеров?
Вы можете создать контейнер с Dockerfile за несколько секунд, а затем, почему люди должны установить виртуальную среду внутри контейнера докеров?
Это как виртуальная машина на виртуальной машине?
Ответы
Ответ 1
Я работаю с virtualenvs в Docker, и я думаю, что есть несколько причин:
- вы можете изолировать свое приложение от пакетов python системы.
- вам может понадобиться запустить пользовательскую версию python, но при этом оставить системные пакеты нетронутыми
- вам может потребоваться управление мелким зерном на пакетах, установленных для определенного приложения.
- вам может потребоваться запустить несколько приложений с различными требованиями.
Я думаю, что это все разумные причины добавить немного pip install virtualenv
в конце установки!:)
Ответ 2
Вот мои два цента, или, скорее, комментарии к ответу @gru и некоторые комментарии.
- Ни докеры, ни виртуальные среды не являются виртуальными машинами
- каждая строка в файле докеры создает накладные расходы. Но это правда, что во время работы виртуальные среды имеют нулевой эффект
- идея контейнеров-докеров заключается в том, что у вас есть один процесс, который взаимодействует с другими (docker-) службами в отношениях клиент-сервер. Запуск различных приложений в одной докере или вызов одного приложения из другого внутри докера - это как-то против этой идеи. Что еще более важно, это добавляет сложности вам докер, которого вы хотите избежать.
- "выделение" пакетов python, которые приложение видит (внутри виртуальной среды) из пакетов, установленных в докере, необходимо только в том случае, если вам необходимо обеспечить определенную версию для одного или нескольких пакетов.
- система, установленная внутри контейнера, служит только средой для одного приложения, которое вы используете. Откорректируйте его в соответствии с требованиями вашего приложения. Нет необходимости оставлять его "нетронутым",
Итак, в заключение: нет веских оснований для использования виртуальной среды внутри контейнера. Установите все необходимые пакеты в системе. Если вам нужен контроль над точными версиями пакетов, установите (docker- широкий) с помощью pip
или аналогичного.
Если вы считаете, что вам нужно запускать разные приложения с разными версиями пакетов внутри одного контейнера, сделайте шаг назад и переосмыслите свой дизайн. Вы направляетесь в сторону большей сложности, более сложного обслуживания и большей головной боли. Разделите работу/услуги на несколько контейнеров.