
프로젝트의 크기가 나날이 증가하고, 기존의 모놀리스식 아키텍처에서 마이크로서비스 방식의 개발 방식의 중요성이 커지는 요즈음의 개발환경이다. 이와 같은 상황에서 떠오른 것이 도커.
도커는 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며, 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계이다.

위 이미지처럼 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해 주는 것이 컨테이너이다.
컨테이너를 이용함으로써 프로그램을 손쉽게 이동 배포 관리를 할 수 있게 해주며, AWS, Azure, Google Cloud등 다양한 환경에서 실행 가능하게 도와준다.
Hypervisor가 나오기 전, 하나의 서버는 하나의 용도로만 사용되며 남은 공간은 방치되고 있었다.
하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영했기에 안정적이지만 비효율적
Hypervisor 출시 이후 서버는 논리적으로 공간을 분할하여 VM(Virtual Machine)이라는 독립적인 가상 환경의 서버를 이용 가능하게 되었다.
즉, Hypervisor는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어이자 하드웨어를 가상화 하면서 하드웨어와 각각의 VM을 모니터링 하는 중간 관리자이다.

하드웨어의 각각의 Core가 독립된 자원을 할당 받아 Hypervisor를 통해 다른 VM을 구동한다.
즉, Hypervisor에 의해 구동 되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당 받기에, 논리적으로 분리 되어 있어서 한 VM에 오류가 발생해도 다른 VM에 퍼지지 않는다는 장점이 있다.
Docker는 이러한 기존 가상화 기술에서 나온 기술이다. 즉, Docker 컨테이너와 VM은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법이라고 볼 수 있다.
VM과 비교했을 때, 컨테이너는 Hypervisor와 Guest OS가 필요하지 않아 더 가볍다.
