[Docker] Docker 사용하는 이유

 
by 박신종


가상머신과 Docker의 차이를 알아보고자 한다.


가상머신과 Docker

기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다.

이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구분되며, 하이퍼바이저에 의해 생성되고 관리되는 운영체제를 게스트 운영체제(Guest OS)라고 한다.

각 게스트 운영체제는 다른 게스트 운영체제와 독립된 공간에서 시스템 자원을 할당받아 사용한다. 이러한 방식의 대표적인 가상화 툴로 VirtualBox, VMware 등이 있다.


시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다.

가상머신은 라이브러리 뿐만 아니라 커널을 포함하고 있기 때문에 이미지 크기 또한 커진다.

가상머신은 완벽한 운영체제를 생성할 수 있다는 장점이 있지만, 일반 호스트에 비해 성능 손실이 있으며, 가상 머신 이미지를 애플리케이션으로 배포하기에는 부담이 큰 단점이 있다.


이에 비해 도커 컨테이너는 리눅스의 자체 기능인 chroot, namespace, cgroup 을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.

컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하며, 컨테이너 안에는 애플리케이션을 구동하기 위한 라이브러리 및 실행파일만 존재하기 때문에 이미지 용량 부담도 적다.

따라서 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때 성능 손실도 거의 없다는 장점이 있다.



도커를 사용하는 이유 ?

1. 독립된 개발 환경을 보장받을 수 있다.

서버를 부팅할 때 실행되는 운영체제를 일반적으로 ‘호스트 OS’ 라 칭하며, 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다. 컨테이너 내부에서 수많은 소프트웨어를 설치하고, 설정 파일을 수정하더라도 호스트 OS에 아무런 영향을 끼치지 않는다.


2. 배포 속도가 가상머신에 비해 빠르다.

위에서 설명하였듯이 이미지에 커널을 포함하지 않아 이미지 크기가 가상머신에 비해 매우 작고, 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어 애플리케이션 배포 속도가 매우 빨라진다.


3. 독립성과 확장성이 높다.

마이크로서비스 아키텍처 구조를 가능하게 하며, 데이터베이스 컨테이너와 웹 서버 컨테이너를 분리할 수 있고, 웹 서비스에 부하가 발생할 시 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산시킬 수 있다.

웹 서버와 데이터베이스의 이미지 버전을 독립적으로 관리하기 때문에 유지보수하기도 용이해진다.







By Getting Started with Docker/Kubernetes (wiki book)