본문 바로가기

Tech/Docker

[Docker] Docker vs VM

반응형

도커는 하나의 서버에 여러개의 격리된 컨테이너를 구동시켜서 동작시키는 일종의 가상화 기술이다.

그렇다면 기존의 가상화 기술은 어떻게 동작하고 있으며 도커와의 차이점은 무엇일까?

1. VM (Virtual Machine)

가상화 기술이란 물리적인 하드웨어 자원을 논리적인 리소스로 제공하기 위한 기술이다. 가상화 기술을 통해서 물리적인 자원을 논리적으로 구분지워서 각 프로세스에 할당하거나 할 수 있다.

가상화 기술 발전 이전에는 하나의 서버에 하나의 애플리케이션만 구동시킬 수 있었다. 하나의 서버에 하나의 OS, 프로그램 만을 운영하기 때문에 안정적이었지만, 남는 서버 자원을 그대로 방치시키기 때문에 비효율적인 경우가 많았다.

이런 비효율성을 극복하기 위해 등장한 것이 가상화 기술이다. 그 중에서도 하이퍼바이저 기반의 가상화가 많이 이용되었다. 하이퍼바이저는 논리적으로 분할된 공간에서 VM (Virtual Machine) 이라는 독립된 가상환경을 만들고 호스트 시스템에서 VM 에 깔린 게스트 OS 를 구동 및 모니터링 하는 역할을 한다.

하이퍼바이저 등을 통해 가상화를 적용하면 물리적인 서버에서 하나 혹은 그 이상의 독립적인 운영체제가 돌아갈 수 있다. 즉 물리적인 서버의 OS 위에 여러 다른 독립적인 OS 들이 가상으로 돌아가는 구조이다. 하나의 OS 에서 돌아가지만 각각의 OS 들이 완전히 독립적인 OS 로 운영된다.

이 방법을 사용하면 서버에서 하나의 OS 만 돌릴 때 보다 물리적 서버의 자원을 더 효율적으로 사용할 수 있다. 하지만 각각의 OS 들을 위해 매번 자원을 할당하고 부팅을 해야하기 때문에 시간, 자원 적으로 소모가 많다.

- 하이퍼바이저

하이퍼바이저는 가상 머신을 생성하고 구동하는 소프트웨어이다. 가상 머신 모니터라고도 불리는 하이퍼바이저는 하이퍼바이저 운영 체제와 가상 머신의 리소스를 분리하여 가상 머신의 생성과 관리를 지원한다.

하이퍼바이저를 실행시키는 물리적 하드웨어를 호스트라고 부르고, 해당 자원을 할당받아 VM 들을 게스트라고 한다.

하이퍼바이저는 CPU, 메모리, 스토리지 등의 자원을 처리하는 풀로 할당된 자원을 각 가상 머신에 제공하고, 실제 자원에 대한 VM 자원의 일정을 관리한다. 호스트 시스템의 하드웨어는 요청을 받아서 실행 작업을 수행하는데, 하이퍼바이저가 VM 의 작업 일정을 관리하면서 VM 의 작업을 요청하면 CPU 가 VM 의 요청을 받아서 CPU 명령을 실행한다.

하이퍼바이저를 사용하여 가상 머신을 실행시키면 여러개의 다른 OS 를 독립적으로 하나의 호스트 OS 에서 실행할 수 있고, 같은 가상화 하드웨어 자원과 하이퍼바이저를 공유하여 사용할 수 있다. 이 것이 가상화의 가장 큰 장점이다.

2. 컨테이너 vs VM

하이레벨에서는 컨테이너와 VM 은 유사해보인다. 둘 다 다양한 IT 컴포넌트들을 패키징한 연산 환경이자 다른 시스템과 격리되어 실행된다. 이 둘의 차이는 게스트 OS 의 존재 유무에 따른 확장성과 이식성, 자원 효율성 등에 있다.

컨테이너는 시스템과 격리된 하나 이상의 프로세스 들의 집합이다. 컨테이너는 프로세스들에 대해 이미 지정된 자원들에 대해서만 요청을 허용하는데, 이러한 자원 제한으로 해당 컨테이너가 충분한 용량을 가진 노드에서 실행 가능하다는 것을 보장한다.

반면 VM 은 게스트 OS 를 가지고 있다. 자신의 OS 를 가지고 있기 때문에 여러 자원 집약적인 기능을 한번에 수행할 수 있다. 그렇기 때문에 VM 에서 사용할 수 있는 자원이 늘어나면 서버, OS, DB, 데스트톱, 네트워크 등에 대해 추상화, 분할, 복제 등을 수행할 수 있다.

이들은 자원 사용에 대해서도 차이가 있는데, VM 은 게스트 OS 의 설치와 실행을 위해서 별도 자원을 할당해주어야 한다. 반면에 컨테이너는 애플리케이션 구동을 위한 패키지만 있으면 구동할 수 있기 때문에 보다 가볍고 빠르게 실행할 수 있다.

하이퍼바이저는 VM 에서 다양한 운영체제를 구동할 수 있도록 허용하지만 컨테이너는 하나의 운영 체제만 구동할 수 있습니다. 리눅스 서버를 구동 중인 컨테이너는 리눅스 운영체제만 구동할 수 있습니다.

그렇기 때문에 단일 OS 커널에서 여러 애플리케이션을 실행하려는 경우에는 컨테이너가 유리하고, 서로 다른 OS 환경에서 애플리케이션을 실행해야 하는 경우에는 VM 이 필요하다.

3. 도커 동작원리

도커 컨테이너는 호스트 OS 의 커널을 공유한다. 각 컨테이너에 리눅스 커널을 할당하여 프로세스를 실행시키고 각 컨테이너 간의 격리를 구현한다. 이때 리눅스 커널의 Cgroup 과 네임스페이스 기능을 이용하여 독립된 공간을 구현하도록 한다. 이를 통해서 서로 다른 프로세스, 컨테이너 사이에 벽을 만든다.

호스트 시스템과 컨테이너가 하나의 커널을 공유하기 떄문에 호스트 시스템에서 컨테이너 내부의 프로세스를 볼 수 있다. 컨테이너 내부에서 프로세스를 실행하고 호스트 시스템에서 ps 명령어를 통해 실행중인 프로세스를 조회하면 컨테이너 내부에서 실행 중인 프로세스를 확인할 수 있다.

도커는 도커 엔진을 통해서 실행되고 관리된다. 도커는 리눅스 커널을 사용하기 때문에 호스트 시스템이 리눅스거나 리눅스 커널을 사용할 수 있는 OS 여야 한다. 도커 엔진은 또 하나의 VM 으로 리눅스를 게스트 OS 로 가지고 있다. 이 게스트 OS 인 리눅스의 커널을 컨테이너에 할당하여서 컨테이너가 실행되고, 이 커널을 통해서 각 컨테이너들이 격리된다. 그렇기 떄문에 호스트 OS 가 리눅스가 아니어도 도커를 사용할 수 있다.

아래의 그림이 위의 내용을 반영한 도커의 구조 그림이다.

[Reference]

https://iancoding.tistory.com/184

 

[Docker] 하이퍼 바이저, VM, 도커 컨테이너, 이미지

 도커를 사용할 때의 흐름 먼저 도커 CLI에 커맨드를 입력한다. 도커 서버(도커 Daemon)이 그 커맨드를 받아서 그것에 따라 이미지를 생성하든 컨테이너를 실행하든 모든 작업을 하게 된다. docker ru

iancoding.tistory.com

https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

도커 : Docker 와 VM의 차이

도커가 있기 이전부터 가상화 기술은 존재했었다. 당연히 도커는 기존의 가상화 기술을 기반으로 만들어졌다. 기존의 가상화 기술을 알아보고 도커와 비교해 본다면 도커를 조금 더 이해할 수

velog.io

https://velog.io/@palza4dev/Docker%EC%99%80-%EA%B0%80%EC%83%81%ED%99%94-%EA%B8%B0%EC%88%A0

 

Docker와 가상화 기술

Docker의 컨테이너 가상화 기술에 대해 알아보고, Docker를 사용하는 이유와 장점에 대해 알아보자.

velog.io

https://www.redhat.com/ko/topics/virtualization/what-is-a-hypervisor

 

 

하이퍼바이저란?

하이퍼바이저는 하드웨어에서 시스템의 운영 체제와 리소스를 분리해 VM에 할당하여 가상 머신을 생성하고 구동하는 소프트웨어입니다.

www.redhat.com

 

반응형

'Tech > Docker' 카테고리의 다른 글

[Docker] Docker Root Directory (도커 스토리지) 변경  (0) 2023.12.14
[Docker] Docker Compose  (0) 2021.09.05
[Docker] Dockerfile 개념 정리  (0) 2021.09.04
[Docker] 도커 개념 정리  (0) 2021.04.13