////
Search

VirtualMachine vs Docker

생성일
2023/04/27 10:42
태그

서버 가상화

한 대의 PC에서 두 개 혹은 그 이상의 운영체제를 실행할 수 있는 기술이다. 하나의 서버 컴퓨터에서 하이퍼바이저에 의해 관리되는 여러 운영 시스템을 구동할 수 있도록 한다.
전가상화
하이퍼바이저가 host 서버의 물리적 자원(CPU와 디스크)에 직접적인 상호작용을 하며, 가상서버를 위한 플랫폼 역할을 한다.
반가상화
하이퍼바이저가 호스트 서버와 게스트 서버 간에 상호작용을 진행하며, 전가상화에 비해 운용하기 위한 자원이 적게 드는 방식이다. 가상서버들에게 독립된 자원이 아닌 모든 가상서버가 자원을 공유하는 방식이다.

Docker 배경

VirtualMachine에서 사용되는 가상화 기술은 하이퍼바이저를 통해 디스크와 물리 자원을 논리적으로 분할하여 독립된 가상환경을 만들고, 호스트 서버에서 게스트 서버를 구동 및 모니터링 하도록 동작했다.
이런 가상화 기술은 하나의 어플리케이션을 돌리기 위해서, 하이퍼바이저-(Kernel S/W+OS)-Application로 세 가지 소프트웨어를 구동시켜야한다.
게스트 서버의 OS가 서버의 OS와 같은 경우에도 OS를 올려야하기 때문에 비효율적이다. 이런 점을 개선하기 위해 나온 것이 Docker다.

VirtualMachine vs Docker

VM의 가상화 방식과 Docker의 가상화 방식의 차이는 아래의 그림과 같다. Docker는 OS를 게스트마다 따로 올리는 것이 아니라, 호스트의 OS를 이용하여 가상화를 진행한다. 게스트 OS를 설치하지 않고 라이브러리와 바이너리파일, application만을 이미지에 담아 설치한다. 기존 VM에서 하드웨어를 가상화하는 계층이 없어졌기 때문에 더 빠른 속도를 제공한다.
기존의 독립된 환경을 구축하여 자원을 독립적으로 사용할 수 있던 VM처럼, Docker에서도 컨테이너마다 독립된 자원을 사용할 수 있도록 리눅스의 namespace와 cgroup을 이용해 개발되었다.
namespace 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능. 각각의 컨테이너 별로 작업 공간을 제공하고, 컨테이너 간에 영향을 미치지 못하도록 격리시켜 구획을 나눈다.
cgroup control group의 약칭으로 cpu, 시스템 메모리, 네트워크와 같은 자원을 사용자 정의 작업 그룹(프로세스)에 할당할 수 있는 기능. namespace를 통해 구획이 나뉜 컨테이너 각각에 별도의 자원(cpu, ram)을 할당한다.

Docker의 장점

1.
하드웨어 가상화를 하지 않고 하이퍼바이저를 포함하는 Docker Engine에서 도맡아 처리하기 때문에 VM에 비해 빠르고 가볍다.
2.
Docker Engine 위에서 동작하고 Application과 binary, library만 포함한 이미지를 설치하면 되기 때문에 배포가 용이하다.
3.
어디서든 docker engine과 docker-compose나 쿠버네틱스, 도커스웜과 같은 오케스트레이션 있다면 동일한 동작을 보장할 수 있다.