programing

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

magicmemo 2023. 7. 5. 20:35
반응형

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

Docker에 대해 알고 있는 바로는 가상 환경에 사용되는 툴입니다.그들의 언어로, 그것은 "컨테이너화"라고 불립니다.이것은 Python의 가상 환경이 하는 일입니다.그러나 Docker에서 virtualenv를 사용할 수 있습니다.그렇다면 가상 환경 내부의 가상 환경일까요?이게 어떻게 작동하는지 헷갈리는데, 누가 좀 설명해주시겠어요?

가상 환경은 Python 종속성만 캡슐화합니다.도커 컨테이너는 전체 OS를 캡슐화합니다.

Python virtualenv를 사용하면 Python 버전과 종속성을 쉽게 전환할 수 있지만 호스트 OS에 구애받지 않습니다.

도커 이미지를 사용하면 Ubuntu, Debian, Alpine 및 Windows Server Core에서 Python을 설치하고 실행하는 전체 OS를 스왑할 수 있습니다.

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

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

위에 추가: 도커와 venv를 결합하는 경우가 있습니다. 일부 OS는 'OS 근처' 앱을 제공하기 위해 설치된 파이썬과 함께 배송됩니다. 예를 들어, 데비안(및 그 파생물)을 이용하는 것으로 알고 있습니다.개발자는 python venv를 사용하여 OS와 함께 제공된 python에 영향을 주지 않고 다른 인터프리터 버전이 필요한 python 앱을 제공할 수 있습니다.이제 Docker는 위에서 언급한 대로 '전체 OS를 격리'하므로 Docker 이미지에도 동일하게 적용됩니다.따라서 Docker 이미지가 필요하거나 원하는 경우 Python 앱을 위해 Docker 이미지 내부에 venv를 생성하는 것이 가장 좋은 방법이라고 생각합니다.

"가상 환경, 특정 버전의 파이썬을 위한 파이썬 설치와 다수의 추가 패키지를 포함하는 자체 포함 디렉터리 트리"

도커 컨테이너는 더 높은 수준의 추상화/분리를 제공하며, "프로세스 공간, 파일 시스템, 네트워크 공간, IPC 공간 등"을 자체적으로 가질 수 있습니다.

가상 환경은 하나 이상의 애플리케이션이 원활하게 함께 작동할 수 있도록 하는 종속성 모음의 통합입니다.관심 응용 프로그램에 대한 런타임 보장 집합을 제공합니다.가상 환경은 주어진 종속성 집합을 시스템의 애플리케이션으로부터 격리하여 사용자와 개발자가 원하는 만큼의 애플리케이션 컨텍스트를 가질 수 있도록 합니다.

특히 Python 가상 환경은 특정 버전의 Python에 연결된 특정 종속성 집합을 시스템 Python에서 분리하도록 설계되었습니다.이러한 방식으로 사용자는 여러 시스템 Python 버전을 가질 수 있으며, 각각 독립적인 종속성을 가진 가상 환경 집합을 가질 수 있습니다.Python 가상 환경은 Python에만 적용되므로 시스템에 설치된 모든 비 Python 애플리케이션은 모든 Python 가상 환경에서 동일한 방식으로 표시됩니다., Python7 to 3.을 시스템 에 4개의 가상 환경(Python 3.7, Python 3.11,Python 3.10)을 가질 수 .venv1-venv4.requests도관서프. 내응램 내의 프로그램venv2의 의정특버전작수있습니다동할만서에▁▁the▁with▁only▁may▁of와만 작동할 수 있습니다.requests다른 가상 환경에서는 사용할 수 없습니다.

반면, Anaconda 가상 환경은 종속성 집합을 Python을 넘어 사실상 모든 애플리케이션을 포함하도록 확장합니다.즉, 시스템 응용프로그램(비 파이썬)과 시스템 응용프로그램과 완전히 독립적인 전체 기본 라이브러리 집합을 포함할 수 있습니다.예를 들어, HDF5 라이브러리가 있는 Apple Silicon의 아나콘다 가상 환경은 가상 환경 내에서만 Apple Silicon용 HDF5의 완전한 빌드를 가집니다.이 Anaconda 가상 환경 외부에서 실행되는 모든 애플리케이션은 HDF5의 존재를 완전히 인식하지 못할 것입니다.

도커(Docker) 또는 일반적으로 컨테이너는 애플리케이션이 네임스페이스로 서로 사실상 격리된 Linux 시스템에서만 사용할 수 있는 완전히 다른 기술입니다.각 컨테이너는 컨테이너 런타임(예: Docker, Containerd, 포드맨 등)에 의해 외부적으로 관리되는 해당 컨테이너의 애플리케이션만 액세스할 수 있는 가상 프로세스 공간을 제공합니다.따라서 아나콘다 가상 환경에서 컨테이너를 사용하는 것이 가능합니다.컨테이너 런타임을 Linux가 아닌 OS로 이식할 수도 있지만 기본 프로세스 네임스페이스를 사용하려면 Linux 커널이 필요합니다.프로세스 네임스페이스를 기본적으로 지원하지 않더라도 Docker가 Windows와 macOS에서 작동하는 이유입니다.

요약하면, 가상화에는 다음과 같은 두 가지 주요 유형이 있습니다.

  • 애플리케이션 종속성 가상화(Python 및 Anaconda 가상 환경), 즉 '정적' 가상화라고 할 수 있습니다.
  • 컨테이너를 통한 프로세스 가상화, 즉 '동적인' 가상화라고 할 수 있습니다.

하지만, 내가 틀릴 수도 있어요

첫째, 컨테이너는 가상 환경과 다릅니다.

Python 리소스를 보다 효율적으로 관리하려면 가상 환경을 생성하고 각 버전에 대해 패키지만 구성하는 것이 좋습니다.

https://docs.python.org/3/tutorial/venv.html

프로세스 엔지니어링 캡슐화를 이미 수행한 도커 컨테이너로 작업할 때 공식 웹 사이트에서 검토할 수 있습니다.

https://www.docker.com/resources/what-container/ #

언급URL : https://stackoverflow.com/questions/50974960/whats-the-difference-between-docker-and-python-virtualenv

반응형