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