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






Виртуальная среда Python будет «контейнеризовать» только среду выполнения Python, то есть интерпретатор Python и библиотеки Python, тогда как Docker изолирует всю систему (всю файловую систему, все библиотеки пользовательского пространства, сетевые интерфейсы). Поэтому Docker гораздо ближе к виртуальной машине, чем к виртуальной среде.
Есть ли какие-либо преимущества в создании виртуальной среды внутри контейнера докеров, учитывая, что контейнер будет обслуживать только веб-приложение фляги.
Virtualenv инкапсулирует только зависимости Python. Контейнер Docker инкапсулирует вся ОС.
С помощью Python virtualenv вы можете легко переключаться между версиями Python и зависимостями, но вы застряли в своей ОС.
С помощью образа Docker вы можете заменить всю ОС - установить и запустить Python в Ubuntu, Debian, Alpine и даже в Windows Server Core.
Существует Docker изображений со всеми возможными комбинациями версий ОС и Python, готовый к использованию в любой системе с установленным Docker.
Кроме того, есть изображения без дистрибутива для «нескольких популярных языков программирования» (включая Python) от Google, которые «содержат только среду выполнения языка программирования» - от ArchWiki / Докер
Добавим к вышесказанному: есть случай для объединения docker и venv: некоторые ОС поставляются с установленным python для предоставления приложений, близких к ОС, например, насколько мне известно, apt на debian (и его производных). Python venv позволяет разработчику поставлять приложение python, для которого требуется другая версия интерпретатора, не влияя на питон, поставляемый с ОС. Теперь, поскольку Docker «изолирует всю ОС», как указано выше, то же самое относится и к образу Docker. Следовательно, на мой взгляд, если требуется / желателен образ Docker, лучше всего создать venv внутри образа Docker для вашего приложения на Python.
Уменьшит ли это время отклика (два уровня виртуализации)?
Виртуальная среда Python изменяет среду Python, но не виртуализирует выполнение интерпретатора Python. Контейнер Docker не виртуализируется, если он не выполняется с помощью гипервизора (Docker Machine).
Я все еще думаю, что мне будет утомительно монтировать докер внутри операционной системы, я обычно делаю это, я программирую на языке оболочки все зависимости проекта, внешние по отношению к pytohn, и я выполняю их автоматически, скажем, в производстве через ssh
«виртуальная среда, автономное дерево каталогов, которое содержит установку Python для конкретной версии Python, а также ряд дополнительных пакетов»
Контейнер докера обеспечивает более высокий уровень абстракции / изоляции, он может иметь собственное «пространство процесса, файловую систему, сетевое пространство, пространство IPC и т. д.»
Это хороший вопрос, но, скорее всего, он будет закрыт как не по теме. virtualenv - это не настоящая изоляция, это изоляция для бедняков с помощью взлома путей и символических ссылок - вы все еще находитесь в своей собственной операционной системе. Docker обеспечивает большую изоляцию, но не настолько, как полноценная виртуальная машина. Контейнер можно рассматривать как нечто среднее между виртуальным боксом (тяжелым, дорогим) и виртуальным (легкий, дешевый). Создание virtualenv внутри контейнера не имеет большого смысла, потому что изоляция уже обеспечивается докером, в этом не было бы особого смысла.