본문 바로가기

정보/Dev

Docker (2) - Hypervisor와 Docker의 가상화 방식

앞서 말한 도커를 사용하는 이유 중 다중 컨테이너에 대한 내용이 있다.

각각의 container가 실행하는 image에는 OS도 들어있다고 설명했다.

그렇다면 Docker는 OS를 여러 개 실행하는 것인가? 이는 VM과는 뭐가 다른 것인가?

 

1. Linux 기반의 Docker

도커는 LXC, 즉 Linux Container를 기반으로 만들어진 플랫폼이기에 이것의 명령어 또한 linux 기반이다.

앞서서 Container라는 것은 cut-down OS를 내장하는 환경을 구축한다고 했지만,

window 환경에서 Docker를 실행하려면 WSL2(Windows Subsystem for Linux)를 설치해야 한다.

왜냐하면 window에서는 linux 기반의 container를 native로 실행할 수 없기 때문이다.

linux의 커널을 실행하기 위해서 WSL 2라는 Hyperviser를 사용한다.

 

2. Hypervisor?

Hypervisor는 단일 물리적 머신에서 여러 가상 머신을 실행하는데 사용할 수 있는 소프트웨어이다.

물리적 컴퓨팅 리소스를 개별 가상 머신에 할당하는 것을 기준으로 Type1과 Type2 Hypervisor로 나뉜다.

  • Type 1 (Baremetal) : 호스트 머신 위에서 하드웨어 리소스에 직접 액세스할 수 있다.
    호스트 OS위에서 직접 동작하기에 overhead가 적다. WSL, Hyper-V가 대표 사례이다.
  • Type 2 (Hosted) : 호스트 OS 위의 소프트웨어 레이어 또는 어플리케이션으로 구동된다.
    Type1에 비해 설치 및 구성이 편리하다.

WSL 2와 같은 경우, Type1이지만 경량화 된 Type 1 Hypervisor를 사용한다. ( https://news.ycombinator.com/item?id=25617528 )

 

 

3. VM vs Docker

공부해본 결과 Docker와 VM의 차이점의 핵심은 두 개인 것 같다.

  • 호스트 OS의 완전성  
    • VM : 호스트 OS와 별개의 게스트 OS를 완전하게 가상화 한다. 즉, 각 VM이 자체적으로 독립적인 커널전체 운영 체제를 갖는다.
      그렇기 때문에, VM 내에서 실행되는 어플리케이션은 VM이 속한 OS의 운영체제와만 상호작용하게 된다.
      • 각 VM이 호스트 OS와 완전히 독립된 환경을 제공하고, 그렇기에 보안적으로 우수한 면도 있다.
    • Docker : 호스트 OS의 커널을 공유한다. 컨테이너 별도의 운영체제를 가상화하지 않는다.
      • VM보다 경량화되고 빠른 환경을 제공한다.
  • 명시적으로 물리적 자원 할당
    • VM : 하드웨어 자원을 명시적으로 할당 받는다.
      Hypervisor를 통해서 물리적 하드웨어 자원을 게스트 OS에 할당하고, 각 VM은 할당된 자원 내에서만 작동
      • 고정된 자원 할당량을 가지므로, 자원이 부족하면 성능에 영향을 줄 수 있다.
      • 혹여나 잉여자원이 발생한다고 하더라도, 이는 동적으로 다른 게스트 OS에 할당되지 않는다.
    • Docker : 물리적으로 자원을 할당받지 않고, 호스트 OS의 자원을 동적으로 공유한다.
      • 자원을 자유롭게 사용하다가 필요에 따라 제한을 설정할 수 있다.

 

 

4. windows에서 Docker는 WSL2(type 1 hypervisor)를 쓰는데, 명시적 할당 아닌가?

WSL 2가 Docker와 가상화 기술 사이의 경계를 복잡하게 만들었다고 한다.

WSL 2는 리눅스 커널을 경량 가상 머신으로 실행하는 방식이다. Type 1 Hypervisor를 통해 가상화 되지만,

WSL 2는 동적 메모리 할당 기능을 제공한다고 한다. (https://docs.docker.com/desktop/wsl/)

차후 깊게 공부해볼만한 블로그 : https://tamalerhino.github.io/posts/docker-desktop-wsl2-deep-dive/

 

 

 

결론) VM과 Docker, 둘의 차이점 정리(WSL 2 가 주는 애매함을 주지 않는 선에서)

  • VM(Virtual Machine)
    • Guest OS + Bins/Libs + App 로 환경을 정의
    • OS 레벨을 포함한 모든 레벨에서 독립적인 어플리케이션 구동 환경 제공
    • 리소스를 많이 사용한다. 그래서 무겁고 느린 편이다.
  • Docker Container
    • Bins/Libs + App 로 환경을 정의
    • Bins/Libs 레벨 독립적 어플리케이션 구동 환경을 제공한다.
    • 리소스를 적게 사용한다.

 

 

이번 글에서는 Docker가 다수의 컨테이너를 가상화하기 위해 사용하는 방식,

그리고 VM과는 그 부분이 어떻게 다른지를 알아보았다.

다음 글에서는 다중 컨테이너간 통신 방식에 대해 서술하겠다.

 

 

 

 

 

https://aws.amazon.com/ko/what-is/hypervisor/

 

하이퍼바이저란 무엇인가요?- 하이퍼바이저 설명 - AWS

컨테이너는 모든 운영 체제에서 애플리케이션을 실행하는 데 필요한 모든 파일과 구성을 저장하는 소프트웨어 패키지입니다. 개발자들은 컨테이너를 사용하여 소프트웨어 개발의 복잡성을 줄

aws.amazon.com