[Docker] 1.1 가상머신과 도커 컨테이너

! 공부 중이기 때문에 내용은 틀렸을 수 있고, 계속 수정될 수 있음 !

호스트 운영체제(Host OS)


서버를 부팅할 때 실행되는 운영체제를 일반적으로 호스트 운영체제라고 부른다.

게스트 운영체제(Guest OS)


하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제라고 한다.

도커(Docker)


도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다. Go언어로 작성되어 있다.

도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로 주목받고 있다.

도커 안에는 여러 컴포넌트들이 있다.

  • dockerd: 도커 엔진
  • containerd: docker로부터 분리된 고급 런타임
  • runc: OCI(Open Container Initiative) 규격에 맞게 컨테이너를 실행하고 생성하는 CLI 도구

하이퍼바이저(Hypervisor)


하이퍼바이저에는 크게 2가지 유형이 있다.

  • 베어 메탈 하이퍼바이저
  • 호스트 하이퍼바이저

여기서 각각에 대한 자세한 내용은 다루지 않는다.

우리가 사용하는 VMware와 같은 툴은 유형2에 속한다.

컨테이너(Container)


컨테이너는 리눅스 기술을 사용하여 프로세스가 사용하는 자원을 격리 하는 것이다. 가상환경에 비교하여 생각하면 이해하기 쉽다.

컨테이너는 가상머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해준다.

가상 머신 vs 도커 컨테이너


vmandcontainor

좌: 가상머신과 우: 도커 컨테이너의 구조

기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다. 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상머신에는 Ubuntu, Cent OS등의 운영체제를 설치해서 사용한다.

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

하이퍼바이저는 완벽한 운영체제를 생성할 수 있다는 장점이 있다. 따라서 가상머신 이미지를 애플리케이션으로 배포하기에는 너무 무겁다는 단점이 있다.

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

  • 완벽한 운영체제 생성
  • 무거워서 배포하기 힘듬

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

컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량이 매우 가벼워진다. 이에 따라 이미지로 만들어 배포하는 시간도 빨라지고, 손실도 거의 없다는 장점이 있다.

  • 가벼움
  • 탄력성
  • 유지 관리 효율