본문 바로가기

도찐개찐

[Docker] docker vs VM 본문

Infra -------------------------/DOCKER

[Docker] docker vs VM

도개진 2023. 3. 14. 13:38
 

1. VM(Virtual Machine)이란?

VM(virtual machine)의 정의는 컴퓨팅 환경을 소프트웨어로 구현한 것, 즉 컴퓨터 시스템을 에뮬레이션(가상현실화)하는 소프트웨어라고 하며, 가상머신상에서 운영 체제나 응용 프로그램을 설치 및 실행 할 수 있다고 한다.

 

VM에 대해 구글링 하다보면 하이퍼바이저에 대한 기술 언급이 많이 되는 것을 알 수 있다.

 

2. 하이퍼바이저(Hypervisor)

하이퍼바이저(hypervisor)는 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼이다. 이는 소프트웨어로 구성되며 물리적 머신에 다수의 가상머신을 띄워 분할할수 있도록 도와준다.

  • 하이퍼바이저는 단일 하드웨어에서 여러 다른 가상 머신을 호스팅할 수 있는 프로그램이다.
  • 가상 머신에 설치된 운영 체제는 게스트 OS 라고 부르며 경우에 따라 인스턴스라고 부르며, 하이퍼바이저가 실행되는 하드웨어는 호스트 머신이라고 부른다.
  • 시스템에서 호스트 하드웨어의 프로세서, 메모리 및 리소스가 있는 것처럼 보이기 때문에 가상 머신 또는 운영 체제 각각은 자체 프로그램을 실행 할 수 있으며, 이러한 리소스를 가상 시스템에 할당 하는 것이 하이퍼바이저라고 한다.

 

3. Docker란?

 

도커란?

초보를 위한 도커 안내서 - 도커란 무엇인가? 도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역

dev-truly.tistory.com

도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

도커에 가장 핵심적인 기술 중 하나는 컨테이너라고 볼 수 있다.

 

3.1 컨테이너(Contanier)란?

컨테이너의 정의는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지라고 한다.

 

개발 속도의 측면

컨테이너를 사용하면 동료 개발자 혹은 자신의 환경이 다름에 구애받지 않고, 훨씬 더 빠르게 개발을 진행할 수 있다.

운영의 효율적 측면
컨테이너는 OS 이미지를 담고 있지 않아 필요한 컴퓨팅 리소스만 사용하면 됩니다. 따라서 애플리케이션을 효율적으로 구동할 수 있다.

폭넓은 구동 환경
컨테이너는 거의 모든 곳에서 구동할 수 있습니다. 소프트웨어 구동 환경이 무엇이든 컨테이너를 사용할 수 있다.

가상화된 공간을 생성하기 위해 Linux 자체 기능인 chroot, namespace, cgroup을 사용하여 Process 단위의 독립 공간을 만들기 때문에 성능 손실이 거의 발생하지 않습니다.

 

4. Docker VS VM

아래의 그림은 Docker와 Virtual Machine차이에 대해 찾아보면 가장 많이 보이는 그림이다. 

Docker 와 Virtual Machine차이

공통점

먼저 공통점을 알아보자면 그림에서 App가 실행되는 환경이 얇은 선으로 격리된 것을 알수 있다. 즉, Docker와 Virtual Machine은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법이다.

차이점

  • Docker은 Virtual Machine에서 사용되는 Guest OS 의 이미지를 사용하지 않기 때문에 가볍다는 장점이 있다.

  • App을 실행하는 방식에 있어 Docker 방식에서는 호스트 OS 위에 어플리케이션의 이미지를 배포하기만 하면 되지만, VM은 어플리케이션을 실행하기 위해서 VM을 띄우고 자원을 할당한 다음, Guest OS를 부팅하므로 훨씬 복잡하고 무겁게 실행해야 한다.

그렇다면 Docker는 자원을 어떻게 할당 받을까? 도커는 주체가 되는 Host OS에서 커널을 공유 받는다. 

 

5. Docker만 사용해야 하나?

위에서 설명한대로라면 VM을 사용할 이유가 없다. 그렇다면 Docker이 최고의 대안책일까?

  • 안전성
    Docker는 커널을 공유한다고 설명하였다. 커널을 공유한다는 것은 많은 장점을 가지고 있지만, 또한 단점도 가지고 있다. 공유는 전염을 당할수 있다는 의미이며 직관적으로 Host OS가 불안정 해진다면 이를 공유받고 있는 Contanier에도 영향을 끼칠수 있다.

  • 다양한 OS 
    또한 커널 기술은 리눅스 기반의 기술이기 때문에 Host OS가 다르면 다른 OS의 Contanier을 올릴수 없다. 예를 들자면 리눅스 기반의 Contanier를 Window에 올릴수 없다는 뜻이다. 반면 VM은 Guest OS를 통해 OS를 설정해 줄 수 있기 때문에 이러한 문제에서 자유로워 진다.

 

6. 결론

도커 컨테이너는 단일 운영 체제 커널에서 여러 응용 프로그램을 실행하려는 경우와 리소스 활용 측면의 장점을 활용한 어플리케이션 AWS와 같은 보안체계를 전문적으로 갖춘 호스팅에서 사용하기 적합하다. 그러나 서로 다른 운영 체제 환경에서 실행해야 하는 어플리케이션이나 서버가 있는 경우에는 VM이 적합하다.


 

참고 : https://hu-nie.tistory.com/entry/Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

728x90
Comments