[python] Docker와 Python virtualenv의 차이점은 무엇입니까?

Docker에 대해 이해 한 바에 따르면 가상 환경에 사용되는 도구입니다. 용어로는 “컨테이너화”라고합니다. 이것은 파이썬의 virtualenv가하는 일입니다. 그러나 Docker 에서 virtualenv 사용할 수 있습니다 . 그렇다면 가상 환경 내부의 가상 환경입니까? 이것이 어떻게 작동하는지 혼란 스럽습니다. 누군가 명확히 해 주시겠습니까?



답변

virtualenv는 Python 종속성 만 캡슐화합니다. Docker 컨테이너는 전체 OS를 캡슐화합니다 .

Python virtualenv를 사용하면 Python 버전과 종속성간에 쉽게 전환 할 수 있지만 호스트 OS에 갇혀 있습니다.

Docker 이미지를 사용하면 전체 OS를 교체 할 수 있습니다. Ubuntu, Debian, Alpine, 심지어 Windows Server Core에 Python을 설치하고 실행할 수 있습니다.

생각할 수있는 OS 및 Python 버전의 모든 조합 이 포함 된 Docker 이미지 가 있으며 Docker 가 설치된 모든 시스템에서 풀다운하여 사용할 수 있습니다.


답변

Python 가상 환경은 Python 런타임, 즉 Python 인터프리터 및 Python 라이브러리 만 “컨테이너화”하는 반면 Docker는 전체 시스템 (전체 파일 시스템, 모든 사용자 공간 라이브러리, 네트워크 인터페이스)을 격리합니다. 따라서 Docker는 가상 환경보다 가상 머신에 훨씬 더 가깝습니다.


답변

위에 추가 : docker와 venv를 결합하는 경우가 있습니다. 일부 OS에는 ‘OS-near’앱을 제공하기 위해 Python이 설치된 상태로 제공됩니다. python venv를 사용하면 개발자가 OS와 함께 제공되는 Python에 영향을주지 않고 다른 인터프리터 버전이 필요한 Python 앱을 제공 할 수 있습니다. 이제 Docker는 위에서 설명한대로 ‘전체 OS를 격리’하므로 Docker 이미지에도 동일하게 적용됩니다. 따라서 내 관점에서 Docker 이미지가 필요하거나 원하는 경우 Python 앱의 Docker 이미지 내에 venv를 만드는 것이 가장 좋습니다.


답변