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


84

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


21
이것은 좋은 질문이지만 주제를 벗어난 것으로 마감 될 가능성이 높습니다. virtualenv는 실제 격리가 아니며 경로 해킹 및 심볼릭 링크를 사용하는 가난한 사람의 격리입니다. 여전히 자체 운영 체제 내에 있습니다. Docker는 더 많은 격리를 제공하지만 완전한 가상 머신 만큼은 아닙니다. 컨테이너는 가상 박스 (무거움, 고가)와 가상 환경 (가벼움, 저가) 사이의 중간 지점으로 생각할 수 있습니다. 컨테이너 내부에 virtualenv를 생성하는 것은 Docker가 이미 격리를 제공했기 때문에 그다지 의미가 없습니다.
WIM

답변:


95

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

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

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

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


24

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


컨테이너가 플라스크 웹 앱만 제공한다는 점을 고려하면 도커 컨테이너 내부에 가상 환경을 만드는 데 어떤 이점이 있습니까?
thanos.a

9

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


2
이로 인해 응답 시간이 느려지나요 (2 단계 가상화)?
Andrew Swift

2
Python 가상 환경은 Python 인터프리터의 실행을 가상화하지 않는 Python 환경을 변경합니다. Docker 컨테이너는 하이퍼 바이저 (Docker Machine)로 실행되지 않는 한 가상화되지 않습니다.
모르 텐

난 아직도 일반적으로 프로젝트의 모든 종속 외부 pytohn에 쉘 언어로, I 프로그램을 이렇게, 내가 운영 시스템 내부의 고정 표시기를 장착하는 것이 지루한 될 것이라고 생각하고 나는 자동으로 실행의 ssh를 통해 생산을 가정 해 봅시다
Alex Ancco Cahuana
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.