VM vs. Docker

Eugenie·2021년 4월 15일
0

Computer_Science

목록 보기
2/4

ft_server 라는 과제를 수행하면서,
docker 에 대해서 공부할 기회가 생겼다.

Docker 의 개념을 알고자 하니,
기존의 가상화 방식 VM 에 대한 언급이 있었다.
그래서 그 둘의 원리를 비교해보고자 한다.

앞서 작성했던 글에 정리되어있지 않은 개념과
원리를 위주로 정리해보려고 한다.

✔️ VM [ Virtual Machine ]

VMOS 위에 Guest OS 전체를 가상화하여 사용하는 방식이다.

cf.

🍎 Host OS vs. Guest OS

=> Host OS : 실물 컴퓨터에 설치된 OS
=> Guest OS : VM 에 설치된 OS

Hypervisor

Host 컴퓨터에서,
다수의 OS 를 동시에 실행시키기 위한 논리적 플랫폼

➡️ Hypervisor TYPE 1 [ Native or Bare-Metal ]

호스트 하드웨어에서 직접 실행되어,
하드웨어를 제어하고 Guest OS 를 관리한다.

여러 가상 시스템 혹은 Guest OS 중 한 곳에서 문제가 발생했을 때,
하드웨어에서 실행 중인 다른 Guest OS 에 영향을 미치지 않는다는 장점이 있다.

🍒 example.

Xen, Oracle VM Server for SPARC, Oracle VM Server for x86, MS Hyper-V, VMware ESX / ESXI

➡️ Hypervisor TYPE 2 [ Hosted Hypervisor ]

다른 응용 프로그램과 마찬가지로
일반적인 OS 에서 실행된다.

Guest OSHost 에서 프로세스로 실행되는 동안,
하이퍼바이저는 Guest OSHost OS 를 분리한다.

Hypervisor TYPE 2
기본 운영체제에서 실행되는 Hypervisor 가 안전하더라도,
문제가 발생되면, 전체 시스템에 영향을 준다.
이는, Host OS 에 전적으로 의존하기 떄문이다.

🍒 example.

VMware Workstation, VMware Player, VirtualBox, Parallels Desktop for Mac

VM 은 컴퓨터의 리소스를 분할하여 사용하기 때문에,
속도가 느리고, 주변 장치와의 완벽한 호환이 어려운 단점이 있다.

이와 같은 단점을 보완하기 위해,
프로세스를 격리하는 방식이 고안되었다.

✔️ docker

위에서 언급한 프로세스를 격리시키는 방식을
리눅스에서는 '리눅스 컨테이너 (Linux Container)' 라고 부른다.

Container

프로세스를 격리시키면
가볍고 빠르게 동작이 가능하다.

VM 보다 단일 물리적 서버에
더 많은 애플리케이션을 배치할 수 있다.

컨테이너형 가상화 기술은
기존의 가상화 기술보다 가벼워지고, 이식성이 뛰어나다.
여기서, Docker 가 바로 대표적인 컨테이너 기술에 해당된다.

Docker image

컨테이너를 실행할 수 있는 실행파일, 설정 값들을 포함하고 있는 것으로,
상태값을 가지지 않고 변하지 않는다.
↪️ Immutable : 한 번 설정한 운영환경은 변경하지 않는다.

컨테이너는 이미지를 실행한 상태라고 볼 수 있고,
추가되거나 변하는 값은 컨테이너에 저장된다.

같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고,
컨테이너의 상태가 바뀌거나,
컨테이너가 삭제되더라도
이미지는 변하지 않고 그대로 남아있다.

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에,
용량이 굉장히 크다.

매번 변경사항을 반영하여 다시 받는다면
매우 비효율적이기 때문에,
layer 라는 개념을 사용한다.
이는 유니온 파일 시스템을 이용하여,
여러 개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해준다.


VM 의 원리와 단점에 대해서 정리를 하고,
Docker 에 대해서 정리를 하다보니,
자연스럽게 어떤 점이 다른 것인지 알게 되었다.

위에 정리는 하지 않았지만,
보안적인 측면에서는
ContainerHypervisor 보다 덜 안전할 수도 있기 때문에,
두 가지를 혼용해서 사용하는 것이 좋다고도 한다.
그렇다고 Hypervisor 또한 관련된 보안문제가 아예 없는 것은 아니다.

늘 그랬듯,
상황을 고려해서 비교해본 뒤
특성에 맞게 선택하는 것이 가장 현명한 방법인 것 같다.


📚 Reference
Docker container architecture.
Hypervisor란?
Docker 작동원리
[Docker] 개념정리 사용방법까지
Docker Container

profile
🌱 iOS developer

0개의 댓글