[DOCKER] Docker 와 VM의 차이에 대해 설명해주세요

Hocaron·2022년 5월 18일
0

DOCKER

목록 보기
2/2
post-custom-banner

Docker 와 VM의 차이에 대해 설명해주세요

면접때 이 질문을 받았지만, 대답을 하지 못했다.
다음에는 답변할 수 있도록 공부해보자.

도커 VS VM

도커는 기존의 가상화 기술을 기반으로 만들어졌다. 기존의 가상화 기술을 알아보고 도커와 비교해 본다면 도커를 조금 더 이해해보자.

VM

가상화 이전의 시대에서는 하나의 서버에 하나의 어플리케이션만 구동시켰다고 한다. 이렇다 보니 하나의 서버에 남는 자원이 많았다. 이런 비효율성을 극복하기 위해 등장한 기술이 가상화 기술이다. 그 중 하이퍼바이저 기반의 가상화가 가장 많이 이용되었다. 하이퍼바이저는 논리적으로 분할된 공간에서 VM 이라는 독립된 가상환경을 만들고 호스트 시스템에서 VM에 깔린 게스트OS를 구동 및 모니터링하는 역할을 한다.

  • 논리적으로 구분된 공간에서 독립된 가상의 하드웨어를 할당 받은 VM들은 서로에게 어떤 영향도 미치지 않는다.
  • 1개의 가상환경에서의 Error 가 다른 가상환경에 영향을 미치지 않는다.

    VM : 분할 공간에서의 가상환경, Virtual Machine
    호스트 시스템 : 서버의 OS
    게스트 OS : VM 의 OS
    하이퍼바이저 : 게스트OS를 구동 및 모니터링

도커와 VM의 차이

게스트OS의 유무

  • VM에는 Guest OS가 깔린다.
  • 도커 컨테이너에는 Guest OS를 설치하지 않는다.
    이는 자원의 효율성 측면에서 차이가 난다. VM는 하나씩 늘 때마다 OS를 위한 자원을 할당해주어야 하는 반면에 도커는 어플리케이션을 구동하는데 필요한 모든 패키지만 있으면 컨테이너를 구동시킬 수 있다.

도커 동작 방식

  • 도커의 컨테이너는 호스트 OS의 커널을 공유한다.
  • 도커가 아닌 호스트의 일반 셸에서 컨테이너 내부의 프로세스를 검색해 볼 수 있다.

    🧐 커널이란?
    하드웨어 자원을 관리하고 하드웨어와 프로세스 사이의 인터페이스 역할을 수행하는 OS의 핵심 구성 요소중 하나이다. 커널을 컴퓨팅 자원을 가상화하고 이를 프로세스에 할당한다.
    커널은 강력한 경영진(하드웨어)을 위해 일하는 바쁜 비서입니다. 비서의 할 일은 직원 및 대중(사용자)으로부터 수신되는 메시지 및 요청(프로세스)을 경영진에게 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 특정한 시간에 누가 경영진을 얼마 동안 만날 수 있는지 결정하는 것입니다.

하나의 커널 그리고 독립된 공간

호스트 프로세스에서 컨테이너 프로세스를 볼 수 있다면 이것은 독립된 공간이라고 할 수 있을까? 도커는 어떻게 독립된 공간을 만들어낼까?

이는 리눅스 커널의 Cgroup(control groups) 과 네임스페이스 기능을 이용해서 구현되어 있다. 위의 기능을 통해서 다른 프로세스 사이에 벽을 만든다. 도커 컨테이너는 커널을 공유하고 있고 커널에서 자원과 프로세스 결리가 이루어지므로 그림은 다음과 같아야 한다고 말한다.

위 그림은 틀렸다. 왜냐하면 도커 컨테이너들은 리눅스 커널을 사용한다. 만약 Host OS 가 macOS/Windows 라면 어떻게 컨테이너를 분리할 수 있을까? Docker Engine 은 또다른 하나의 VM 이다. VM은 Guest OS를 갖고 있다. Docker의 Guest OS가 바로 리눅스가 되고 이 위에 쌓이는 컨테이너에는 더이상 Guest OS가 깔리지 않으며 리눅스 커널의 기능으로 각 컨테이너들은 격리가 된다. 그래서 좀 더 정확한 그림을 가져와 본다면

위와 같은 그림이 가장 도커를 잘 설명한 그림이 아닐까. Docker 는 그 자체로는 VM 이기 때문에 하이퍼바이저를 포함하고 있고 실제 환경(PC)과 가상 환경(도커)의 관계에서는 Guest OS 이고 도커와 컨테이너의 관계에서는 Host OS 인 리눅스가 설치되어 있다. 해당 컨테이너에는 VM Host와는 달리 OS가 설치되어 있지 않다.

🧐 리눅스 네임스페이스란?
리눅스 네임스페이스는 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능이다. 한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행된다. 이를 단일 네임스페이스라고 생각해볼 수 있다. 실제로 리눅스에서는 1번 프로세스(init)에 할당되어있는 네임스페이스들을 자식 프로세스들이 모두 공유해서 사용하는 구조로 이루어져있다.

도커는 어떤 장점이 있나요?

  • 배포하는 이미지들이 만약 같은 라이브러리/프레임워크를 사용하고 있을 때, 다른 버전의 라이브러리/프레임워크를 사용하더라도 동작할 수 있다.

VM은 어떤 장점이 있나요?

  • 다른 GuestOS와 분리 독립된 공간과 자원을 할당받아 사용되기 때문에, 보안성 측면에서 효율적이라고 할 수 있다.

References

profile
기록을 통한 성장을
post-custom-banner

0개의 댓글