Nach meinem Verständnis von Docker handelt es sich um ein Tool, das für virtuelle Umgebungen verwendet wird. In ihrer Umgangssprache heißt es "Containerisierung". Dies ist mehr oder weniger das, was Pythons Virtualenv tut. Sie können virtualenv jedoch in Docker verwenden. Ist es also eine virtuelle Umgebung in einer virtuellen Umgebung? Ich bin verwirrt darüber, wie das überhaupt funktionieren würde. Könnte jemand bitte klarstellen?
python
docker
virtualenv
danielschnoll
quelle
quelle
Antworten:
Eine virtuelle Umgebung kapselt nur Python-Abhängigkeiten. Ein Docker-Container kapselt ein gesamtes Betriebssystem .
Mit einer virtuellen Python-Version können Sie problemlos zwischen Python-Versionen und Abhängigkeiten wechseln, aber Sie bleiben bei Ihrem Host-Betriebssystem hängen.
Mit einem Docker-Image können Sie das gesamte Betriebssystem austauschen - installieren und ausführen Sie Python unter Ubuntu, Debian, Alpine und sogar Windows Server Core.
Es gibt Docker- Images mit jeder erdenklichen Kombination von Betriebssystem- und Python-Versionen, die auf jedem System mit installiertem Docker heruntergefahren und verwendet werden können.
quelle
Die virtuelle Python-Umgebung "containerisiert" nur die Python-Laufzeit, dh Python-Interpreter und Python-Bibliotheken, während Docker das gesamte System (das gesamte Dateisystem, alle User-Space-Bibliotheken, Netzwerkschnittstellen) isoliert. Daher ist Docker einer virtuellen Maschine viel näher als einer virtuellen Umgebung.
quelle
Hinzu kommt, dass Docker und Venv kombiniert werden müssen: Einige Betriebssysteme werden mit Python geliefert, das installiert ist, um "OS-nahe" Apps bereitzustellen, z. B. meines Wissens für Debian (und seine Derivate). Mit dem Python-Venv kann ein Entwickler eine Python-App ausliefern, für die eine andere Interpreter-Version erforderlich ist, ohne die mit dem Betriebssystem gelieferte Python zu beeinträchtigen. Da Docker nun wie oben angegeben das gesamte Betriebssystem isoliert, gilt dies auch für ein Docker-Image. Wenn aus meiner Sicht ein Docker-Image erforderlich / erwünscht ist, empfiehlt es sich daher, im Docker-Image ein Venv für Ihre Python-App zu erstellen.
quelle