В чем разница между Docker и Python virtualenv?

Насколько я понимаю о Docker, это инструмент, используемый для виртуальных сред. На их жаргоне это называется «контейнеризация». Это более или менее то, что делает virtualenv Python. Однако вы можете использовать virtualenv в Docker. Итак, это виртуальная среда внутри виртуальной среды? Я не понимаю, как это вообще будет работать, так что кто-нибудь может уточнить?

Это хороший вопрос, но, скорее всего, он будет закрыт как не по теме. virtualenv - это не настоящая изоляция, это изоляция для бедняков с помощью взлома путей и символических ссылок - вы все еще находитесь в своей собственной операционной системе. Docker обеспечивает большую изоляцию, но не настолько, как полноценная виртуальная машина. Контейнер можно рассматривать как нечто среднее между виртуальным боксом (тяжелым, дорогим) и виртуальным (легкий, дешевый). Создание virtualenv внутри контейнера не имеет большого смысла, потому что изоляция уже обеспечивается докером, в этом не было бы особого смысла.

wim 21.06.2018 20:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
115
2
29 043
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Виртуальная среда Python будет «контейнеризовать» только среду выполнения Python, то есть интерпретатор Python и библиотеки Python, тогда как Docker изолирует всю систему (всю файловую систему, все библиотеки пользовательского пространства, сетевые интерфейсы). Поэтому Docker гораздо ближе к виртуальной машине, чем к виртуальной среде.

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

thanos.a 24.04.2020 00:04
Ответ принят как подходящий

Virtualenv инкапсулирует только зависимости Python. Контейнер Docker инкапсулирует вся ОС.

С помощью Python virtualenv вы можете легко переключаться между версиями Python и зависимостями, но вы застряли в своей ОС.

С помощью образа Docker вы можете заменить всю ОС - установить и запустить Python в Ubuntu, Debian, Alpine и даже в Windows Server Core.

Существует Docker изображений со всеми возможными комбинациями версий ОС и Python, готовый к использованию в любой системе с установленным Docker.

Кроме того, есть изображения без дистрибутива для «нескольких популярных языков программирования» (включая Python) от Google, которые «содержат только среду выполнения языка программирования» - от ArchWiki / Докер

muthuh 22.11.2020 12:22

Добавим к вышесказанному: есть случай для объединения docker и venv: некоторые ОС поставляются с установленным python для предоставления приложений, близких к ОС, например, насколько мне известно, apt на debian (и его производных). Python venv позволяет разработчику поставлять приложение python, для которого требуется другая версия интерпретатора, не влияя на питон, поставляемый с ОС. Теперь, поскольку Docker «изолирует всю ОС», как указано выше, то же самое относится и к образу Docker. Следовательно, на мой взгляд, если требуется / желателен образ Docker, лучше всего создать venv внутри образа Docker для вашего приложения на Python.

Уменьшит ли это время отклика (два уровня виртуализации)?

Andrew Swift 02.02.2019 14:08

Виртуальная среда Python изменяет среду Python, но не виртуализирует выполнение интерпретатора Python. Контейнер Docker не виртуализируется, если он не выполняется с помощью гипервизора (Docker Machine).

Morten 20.03.2019 10:43

Я все еще думаю, что мне будет утомительно монтировать докер внутри операционной системы, я обычно делаю это, я программирую на языке оболочки все зависимости проекта, внешние по отношению к pytohn, и я выполняю их автоматически, скажем, в производстве через ssh

Alex Ancco Cahuana 03.09.2020 17:30

«виртуальная среда, автономное дерево каталогов, которое содержит установку Python для конкретной версии Python, а также ряд дополнительных пакетов»

Контейнер докера обеспечивает более высокий уровень абстракции / изоляции, он может иметь собственное «пространство процесса, файловую систему, сетевое пространство, пространство IPC и т. д.»

Другие вопросы по теме