Docker와 Debian 패키징 시스템은 겹치는 영역이 작지만 본질적으로 두 가지 매우 다른 문제를 해결합니다 .
데비안 패키징 시스템은 호스트에 소프트웨어를 설치하고 가능한 한 쉽게 업그레이드 할 수 있도록 만들어졌습니다. "소프트웨어 X 버전 A에는 버전 B 이상의 소프트웨어 Y가 필요합니다"또는 "소프트웨어 X는 소프트웨어 Z 버전 C와 함께 설치해서는 안됩니다"와 같은 소프트웨어 구성 요소 간의 복잡한 종속성 및 제약 조건 패턴을 처리 할 수 있습니다.
Docker 시스템은 여러 호스트 (예 : Docker swarm 또는 Kubernetes 클러스터)에서 서비스, 특히 마이크로 서비스를 쉽게 설명하고 배포하기 위해 고안되었습니다.
이 두 가지 문제는 본질적으로 직교 적이므로 해결해야 할 배포 문제가 주어지면 솔루션의 일부로 둘 중 하나를 사용하거나 전혀 사용하지 않을 수 있습니다. 둘 다 사용할 때, 데비안 패키지는 Docker 이미지 제작에 사용되며 Dockerfile (컨테이너에서 실행 된 "가상 시스템"을 설명하는 Docker 이미지를 준비하는 데 사용되는 레시피)은 기본적으로 데비안 저장소를 데비안 패키징 시스템의 소스와 패키지를 설치하십시오.
이것을 염두에두고, 당신이 정말로 찾고있는 것은 불변의 서버 패턴 을 구현하는 것 같습니다.. 클라우드 기술의 최근 개발로 소프트웨어 패키지 시스템 (데비안 패키징 시스템 등)의 기존 소프트웨어 업그레이드 시스템을 사용하는 것이 아니라 전체 서버를 한 번에 간단히 교체하여 소프트웨어를 업그레이드 할 수있었습니다. (일부 사람들은이 개발 이전에 서버에 3 개의 OS가 있고, 2 개는 어플라이언스를 실행하는 데 사용되며 2 개는 어플라이언스 교체를 수행하는 데 사용되는 미니 OS입니다. 지나치게 복잡하지는 않지만 항상 틈새.) 패키지 관리자를 사용하여 서버에서 소프트웨어를 업그레이드하는 데 익숙한 경우 서버의 최종 상태는 서버의 "업그레이드 기록"에 따라 달라집니다. 특히 오류가 발생하는 경우 업그레이드 과정. 이 이질성은 나쁘고
우리는이 상자들을 수천 개 가지고 있습니다. 다양한 정도의 성공을 거둔 deb 패키지를 통해 패키지 종속성, 프로세스 등록 등을 관리합니다.
이것과 관련이 있습니다. 변경 불가능한 서버 패턴은 문제에서 "업그레이드 기록"개념을 본질적으로 파괴하여이 오류의 원인을 제거합니다.
불변의 서버 패턴을 구현하는 다양한 옵션이 있습니다. 두 가지 인기있는 선택은 Docker 이미지, 이미지 또는 클라우드 공급자의 "마스터 인스턴스 이미지"를 사용하는 것입니다 (AWS에서는 AMI, Google Compute Engine에서는 사용자 지정 이미지라고 함). . 유스 케이스는 클라우드 기반 기술의 사용을 금지하므로 Docker 이미지가 유일하게 적합한 것으로 가정합니다. (완료를 위해 Docker의 대안으로 Virtual Box 또는 유사한 가상화 솔루션을 사용하는 것과 같은 다른 접근법을 사용하는 것이 가능합니다.)
변경 불가능한 서버 패턴 기술을 사용하는 경우 서버를 나타내는 새로운 아티팩트 (Docker 이미지)를 소개하며이 아티팩트도 테스트 할 수 있으며 서비스로드 외에 프로덕션 설정을 그대로 복제하는 설정을 얻는 것이 매우 쉽습니다.
지금까지 설명한 구체적인 문제를 고려하기 위해 Docker로 불변 서버 패턴을 구현하는 것이 실제로 원하는 것으로 가정 해 봅시다. Docker 시스템과 데비안 패키징 시스템은 상호 배타적이지 않고 보완 적이므로 (참조. 소개) 소프트웨어 용 데비안 패키지를 준비해야한다면 여전히 문제를 해결해야합니다.
Docker 이미지 또는 호스트에 데비안 패키지를 사용하여 소프트웨어를 설치하는 것은 해결해야하는 버전 관리 문제의 복잡성에 있습니다. 동시에 여러 버전의 소프트웨어를 실행하는 경우 가끔 다운 그레이드해야하며 신중하게 문서화해야하는 복잡한 버전 요구 사항이있는 경우 데비안 패키지가 반드시 필요합니다. 그렇지 않으면이 단계를 건너 뛸 수 있지만 이미 이러한 패키지를 제작 및 배포하려고 노력했기 때문에 작업을 포기하는 데 실질적인 가치는 없습니다. 따라서 데비안 꾸러미를 계속 제작 해 보시기 바랍니다.