Z tego, co rozumiem o Dockerze, jest to narzędzie używane w środowiskach wirtualnych. W ich języku nazywa się to „konteneryzacją”. Tak mniej więcej robi virtualenv w Pythonie. Możesz jednak używać virtualenv w Dockerze. Czy jest to zatem środowisko wirtualne w środowisku wirtualnym? Nie wiem, jak to w ogóle zadziała, więc czy ktoś mógłby to wyjaśnić?
python
docker
virtualenv
danielschnoll
źródło
źródło
Odpowiedzi:
Virtualenv hermetyzuje tylko zależności Pythona. Kontener Docker hermetyzuje cały system operacyjny .
Dzięki Python virtualenv możesz łatwo przełączać się między wersjami i zależnościami Pythona, ale utkniesz w systemie operacyjnym hosta.
Dzięki obrazowi Dockera możesz zamienić cały system operacyjny - zainstalować i uruchomić Python na Ubuntu, Debian, Alpine, a nawet Windows Server Core.
Istnieją obrazy Dockera z każdą kombinacją wersji systemu operacyjnego i Pythona, które możesz wymyślić, gotowe do ściągnięcia i użycia w dowolnym systemie z zainstalowanym Dockerem.
źródło
Środowisko wirtualne Pythona "konteneruje" tylko środowisko uruchomieniowe Pythona, tj. Interpreter języka Python i biblioteki Pythona, podczas gdy Docker izoluje cały system (cały system plików, wszystkie biblioteki przestrzeni użytkownika, interfejsy sieciowe). Dlatego Docker jest znacznie bliżej maszyny wirtualnej niż środowisko wirtualne.
źródło
Dodając do powyższego: istnieje argument za połączeniem docker i venv: niektóre systemy operacyjne są dostarczane z zainstalowanym pythonem w celu dostarczania aplikacji „OS-near”, np. Według mojej wiedzy apt na debianie (i jego pochodnych). Python venv umożliwia deweloperowi dostarczenie aplikacji w języku Python, która wymaga innej wersji interpretera bez wpływu na język Python dostarczany z systemem operacyjnym. Teraz, ponieważ Docker „izoluje cały system operacyjny”, jak wspomniano powyżej, to samo dotyczy obrazu Dockera. Dlatego moim zdaniem, jeśli obraz Dockera jest wymagany / pożądany, najlepszą praktyką jest utworzenie wenv wewnątrz obrazu Dockera dla aplikacji Python.
źródło