docker를 사용할 때 virtualenv가 (프로덕션에서) 목적을 제공합니까?
개발을 위해 우리는 의존성과 관련하여 분리 된 개발을 위해 virtualenv를 사용합니다. 에서 이 질문에 그것은 파이썬 응용 프로그램을 배포 보인다 VIRTUALENV하는 것이 좋습니다.
이제 배포 를 위해 docker 를 사용하기 시작했습니다 . 이것은 더 격리 된 환경을 제공하므로 docker 컨테이너 내부에서 virtualenv 사용에 의문을 제기합니다. 단일 응용 프로그램의 경우 docker가 이미 격리를 제공하므로 virtualenv에 목적이 없다고 생각합니다. 단일 도커 컨테이너에 여러 응용 프로그램이 배포되는 경우 응용 프로그램이 충돌하는 종속성을 가질 수 있으므로 virtualenv가 목적을 가지고 있다고 생각합니다.
단일 애플리케이션이 Docker 컨테이너에 배포 될 때 virtualenv를 사용해야합니까?
Docker는 여러 애플리케이션을 포함해야합니까, 아니면 컨테이너 당 하나의 애플리케이션 만 포함해야합니까?
그렇다면 여러 애플리케이션이있는 컨테이너를 배포 할 때 virtualenv를 사용해야합니까?
Virtualenv는 docker보다 오래 전에 만들어졌습니다. 오늘날 저는 다음과 같은 이유로 virtualenv 대신 docker에 의지합니다.
- Virtualenv는 여전히 제품을 소비하는 사람들이 계란을 다운로드해야 함을 의미합니다. 도커를 사용하면 "작동하는 것으로 알려진"무언가를 얻습니다. 첨부 된 문자열이 없습니다.
- Docker는 virtualenv보다 훨씬 더 많은 작업을 수행 할 수 있습니다 (예 : 다른 Python 버전이 필요한 제품이있을 때 깨끗한 환경 만들기).
Docker의 주요 단점은 Windows 지원이 불량하다는 것입니다. Windows 10 버전으로 변경되었습니다.
"컨테이너 당 앱 수"의 경우 일반적인 정책은 1입니다.
예. 여전히 virtualenv를 사용해야합니다. 또한 지금은 달걀 대신 바퀴를 만들어야합니다. 마지막으로 전체 빌드 도구를 사용하여 컨테이너에 바퀴를 빌드하고 애플리케이션 컨테이너에 빌드 도구를 설치하지 않음으로써 Docker 이미지를 간결하고 효율적으로 유지해야합니다.
이 훌륭한 기사를 읽어야합니다. https://glyph.twistedmatrix.com/2015/03/docker-deploy-double-dutch.html
핵심은
많은 경우, 아마도 대부분의 경우 Pip을 사용하여 Python을 시스템에 설치하는 것만으로도 잘 작동합니다. 그러나보다 정교한 애플리케이션의 경우 Python으로 구현 된 기본 컨테이너에서 제공하는 도구를 호출하려고 할 수 있지만 호스트에서 관리하는 종속성이 필요합니다. 가상 환경에 관계없이 항목을 넣음으로써 기본 이미지의 패키지 시스템에서 설정 한 항목을 애플리케이션이 빌드하는 항목과 깔끔하게 분리합니다. 즉, 애플리케이션의 Python 사용이 얼마나 복잡한 지에 관계없이 예기치 않은 상호 작용이 없어야합니다. 있다.
virtualenv를 도입하는 것은 매우 간단하므로 Docker 컨테이너에서 시작하지 않고 시작한다고 말하고 싶습니다.
필요한 경우 설치할 수 있습니다. "pip freeze> requirements.txt"를 실행하면 모든 파이썬 패키지가 제공됩니다. 그러나 다른 컨테이너를 만드는 것이 더 바람직한 대안이 될 것이기 때문에 도커 컨테이너 내부에 virtualenv가 필요하지 않을 것입니다.
단일 컨테이너에 둘 이상의 응용 프로그램을 사용하는 것은 권장하지 않습니다. 이 지점에 도달하면 컨테이너가 너무 많은 일을하고있는 것입니다.
누군가가 docker를 사용하여 virtualenv를 완전히 교체하려면 할 수 있습니다.
다른 환경에 대해 다른 Dockerfile을 만들고 환경에 필요한 포트와 볼륨을 사용하십시오.
개발의 예로이 프로젝트를 사용할 수 있습니다 . docker compose를 실행하고 코딩을 시작하십시오. 로그와 데이터를 볼륨에 넣어 테스트, 스테이징 및 프로덕션과 같은 다양한 환경에 대해 고유 한 Dockerfile을 작성하십시오.
이 링크는 https://vsupalov.com/docker-python-development/ 도 유용합니다 .
두 가지를 모두 사용하는 이유는 다단계 빌드를 더 쉽게 사용 하고 한 단계에서 빌드 한 종속성을 이후 이미지 / 레이어로 간단히 이동할 수 있기 때문입니다 . 예제는 여기 에서 찾을 수 있습니다 .
'Development Tip' 카테고리의 다른 글
504 시간 초과 오류 증가 (0) | 2020.12.04 |
---|---|
WebApi에서 HttpContext.Current를 사용하는 것은 비동기로 인해 위험합니다. (0) | 2020.12.04 |
PropertyDefinition이 일치하지 않습니다. (0) | 2020.12.04 |
Visual Studio에서 이전에 실행 된 몇 줄이 무엇인지 확인하기 위해 뒤로 물러 설 방법이 있습니까? (0) | 2020.12.04 |
std :: function이 동등하지 않은 이유는 무엇입니까? (0) | 2020.12.04 |