베어메탈에서 도커 컨테이너를 실행하는 것과 비교하여 가상 머신 내에서 도커 컨테이너를 실행하면 어떤 이점이 있나요?

베어메탈에서 도커 컨테이너를 실행하는 것과 비교하여 가상 머신 내에서 도커 컨테이너를 실행하면 어떤 이점이 있나요?

베어메탈(호스트 머신에서 직접)에서 도커 컨테이너를 실행하는 것과 비교하여 가상 머신 내에서 도커 컨테이너를 실행하면 어떤 이점이 있나요?

가상 머신 내에서 도커 컨테이너를 실행하는 일부 회사에 대해 들었습니다. 특히 일부 조직이 이 작업을 수행하고 있다고 언급된 도커 컨퍼런스에서 그렇습니다. 왜?

(호스트에서 실행되는 Docker 컨테이너와 호스트의 KVM 내에서 실행되는 Docker 컨테이너 비교)

  • Docker와 KVM 모두 현재 상태를 저장하는 방법이 있으므로 여기에는 추가적인 이점이 없습니다.
  • Docker와 KVM 모두 네트워크 사용을 위해 별도의 IP를 제공할 수 있습니다.
  • Docker와 KVM 모두 실행 중인 프로그램과 설치를 분리하여 호스트 실행 프로세스와의 충돌을 방지합니다.
  • Docker와 KVM은 모두 기업의 성장에 따라 쉽게 확장할 수 있는 방법을 제공합니다.
  • 둘 다 인스턴스를 다른 호스트로 쉽게 이동할 수 있는 방법을 제공합니다.

그렇다면 왜 KVM에서 Docker를 실행할까요? KVM으로 인해 불필요한 성능 손실을 겪지는 않을까요?

답변1

당신에 대한 포인트:

Docker와 KVM 모두 현재 상태를 저장하는 방법이 있으므로 여기에는 추가적인 이점이 없습니다.

상태를 저장하는 방식을 제외하면 두 가지 방법 중 하나가 더 효율적일 수 있습니다. 또한 컨테이너 상태를 100% 안정적으로 저장할 수는 없습니다.

Docker와 KVM 모두 네트워크 사용을 위해 별도의 IP를 제공할 수 있습니다.

사용하는 가상 머신과 컨테이너 시스템에 따라 컨테이너보다 가상 머신을 설정하는 것이 더 쉬울 수도 있습니다. 이는 VM/컨테이너에 전용 계층 2 인터페이스를 제공하려는 경우 특히 그렇습니다. 이는 거의 항상 VM을 사용하는 것이 더 쉽습니다.

Docker와 KVM 모두 실행 중인 프로그램과 설치를 분리하여 호스트 실행 프로세스와의 충돌을 방지합니다.

가상 머신은 컨테이너보다 더 나은 작업을 수행합니다. 컨테이너는 여전히 호스트 운영 체제에 대한 기본 시스템 호출을 수행하고 있습니다. 이는 그들이 가능성이 높다는 것을 의미합니다.곧장이러한 시스템 호출의 버그를 이용하세요. 가상 머신에는 자체 운영 체제가 있어 더 나은 격리가 가능합니다.

Docker와 KVM은 모두 기업의 성장에 따라 쉽게 확장할 수 있는 방법을 제공합니다.

나는 개인적으로 VM이 올바르게 확장되는 것이 컨테이너보다 조금 더 낫다는 것을 알았지만(가장 가능성이 높은 이유는 VM이 ​​권한 문제를 하드웨어에 적절하게 오프로드하는 반면 컨테이너는 이를 처리하기 위해 소프트웨어가 필요하기 때문일 가능성이 높습니다).

둘 다 인스턴스를 다른 호스트로 쉽게 이동할 수 있는 방법을 제공합니다.

아니요, 정확히는 아닙니다. 둘 다 오프라인으로 마이그레이션할 수 있지만 많은 컨테이너 시스템은 실시간으로 마이그레이션할 수 없습니다(예:달리기한 호스트에서 다른 호스트로의 컨테이너). 실시간 마이그레이션은매우합리적인 규모로 실행 중인 경우 이는 관리 효율성 측면에서 중요합니다(호스트에서 업데이트를 실행해야 합니까? 모든 것을 다른 시스템으로 마이그레이션하고, 호스트를 재부팅하고, 모든 것을 두 번째 호스트로 이동합니다. 콘텐츠는 첫 번째 호스트로 마이그레이션됩니다. 재부팅, 재조정).

몇 가지 추가 사항:

  • VM은 일반적으로 고가용성 옵션을 사용하기가 더 쉽습니다. 컨테이너에 그러한 옵션이 없다는 것은 아니지만 일반적으로 가상 머신과 함께 사용하고 애플리케이션 코드를 조정하는 것이 더 쉽다는 것입니다.
  • 가상 머신은 클라우드 호스팅 간에 직접 마이그레이션하기가 더 쉽습니다(기본 호스팅 환경이 어떻게 생겼는지 똑같이 신경 쓸 필요가 없습니다).
  • 가상 머신을 사용하면 호스트 운영 체제와 다른 플랫폼을 실행할 수 있습니다. Linux 배포판마다 커널 구성이 매우 다르며, 한 배포판용으로 작성된 내용이 다른 배포판에서도 완전히 작동한다고 보장할 수는 없습니다.
  • VM을 사용하면 잠재적인 공격 표면을 더 효과적으로 제어할 수 있습니다. 컨테이너를 사용하면 호스트 운영 체제의 코드가 여전히 메모리에 있어 잠재적인 공격 벡터가 된다는 사실에서 벗어날 수 없습니다. 가상 머신을 사용하면 독립형 운영 체제를 실행할 수 있으므로 실제로 필요한 최소 수준으로 줄일 수 있습니다.
  • 가상 머신에서 관련 컨테이너 그룹을 함께 실행하면 컨테이너 그룹을 함께 시작하고 중지하는 간단하고 확실한 방법이 제공됩니다.

답변2

단일 로드를 수행하기에는 하드웨어가 너무 커지면서 가상화가 시작되었으며, 강력한 시스템이 여러 작업을 수행하고 작업을 서로 분리해야 할 필요성이 분명해졌습니다. 가상 머신은 이를 매우 잘 수행합니다. 즉, 대규모 호스트를 여러 개의 작은 호스트로 분할합니다. 컨테이너는 호스트를 사용 가능한 덩어리로 나누는 것이 아니라 특정 애플리케이션과 워크로드를 격리하는 방법입니다.

따라서 강력한 시스템을 보유하고 있으면 이를 다른 속성(리소스, 운영 체제 등)을 가질 수 있는 여러 개의 작은 부분으로 분할할 수 있습니다.

물론 이것이 절대적이고 유일한 방법은 아니지만 VM과 컨테이너를 혼합하는 가장 확실한 경우입니다.

관련 정보