У чому різниця між Docker та Python virtualenv?


84

З того, що я розумію про Docker, це інструмент, що використовується для віртуального середовища. У їхньому жаргоні це називається "контейнеризація". Це більш-менш те, що робить virtualenv Python. Однак ви можете використовувати virtualenv в Docker. Отже, це віртуальне середовище всередині віртуального середовища? Мене бентежить, як це могло б навіть працювати, тож хтось може пояснити?


21
Це гарне запитання, але, швидше за все, це буде закрито, оскільки це не стосується теми. virtualenv - це не справжня ізоляція, це ізоляція бідної людини за допомогою шляхових хаків та символьних посилань - ви все ще перебуваєте у своїй власній операційній системі. Docker забезпечує більшу ізоляцію, але не таку, як повноцінна віртуальна машина. Ви можете розглядати контейнер як проміжний шлях між віртуальною скринькою (важкою, дорогою) та virtualenv (легкою, дешевою). Створення virtualenv всередині контейнера не має особливого сенсу, оскільки ізоляція вже передбачена Docker, робити це не буде багато сенсу.
вім

Відповіді:


95

Virtulenv інкапсулює лише залежності Python. Контейнер Docker інкапсулює цілу ОС .

За допомогою Python virtualenv ви можете легко переключатися між версіями Python і залежностями, але ви застрягли в хост-ОС.

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

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


24

Віртуальне середовище Python буде "містити" лише середовище виконання Python, тобто інтерпретатор python та бібліотеки python, тоді як Docker ізолює всю систему (цілу файлову систему, усі бібліотеки простору користувача, мережеві інтерфейси). Тому Docker набагато ближче до віртуальної машини, ніж до віртуального середовища.


Чи є якась перевага у створенні віртуального середовища всередині контейнера докера, враховуючи, що контейнер буде обслуговувати лише веб-програму-колбу.
thanos.a

9

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


2
Це уповільнило б час відгуку (два рівні віртуалізації)?
Ендрю Свіфт,

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

Я все ще думаю, що мені буде нудно монтувати докер всередині операційної системи, я зазвичай це роблю, програмую на мові оболонки всі залежності проекту, зовнішні для pytohn, і виконую їх автоматично, скажімо, у виробництві через ssh
Алекс Анкко Кахуана
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.