Docker가 VM 달리 OS를 효율적으로 사용하는 원리
Docker를 설명하기 위해 일단 가상 머신(VM : Virtual Machine)에 대한
개념을 어느 정도 들어봤다는 가정하에서 글을 작성해본다.
보통 우리는 하나의 컴퓨터에 가상 컴퓨터를 만들어서 운영체제를 설치하는 것을 상상한다.
"그렇다면 컴퓨터를 한 대 더 안 사도 되잖아?" 의 개념에서 나온 게 바로 VM이다.
하지만, 우리가 고작 웹서버 하나 돌리려고 무거운 운영체제(OS)를 통째로 깐다?
이는 너무 무겁고 비효율적이다.
그리고 이미 사용하고 있는 운영체제 위에 또 운영체제를 올리니 리소스 낭비가 심하다.
이때 등장한 게 Docker라는 녀석이다.
Docker = Process 격리 라고 기억하자.
※. Docker도 OS 설치하는 거 아냐?
Docker 컨테이너를 띄울 때도 Ubuntu, CentOS 같은 이미지를 다운받으니까 "어? 이것도 결국 OS 설치하는 거 아니야?"라고 생각하기 쉽다.
실제로 VM용 우분투 설치 파일(ISO)은 몇 GB나 되는데, Docker용 우분투 이미지는 고작 70MB 정도다. 어떻게 이렇게 용량이 작을 수 있을까? 여기서 커널(Kernel)의 개념이 등장한다.
VM이라는 녀석은 새로운 뇌(커널)와 도구를 통째로 새로 만드는 것이라면,
Docker라는 녀석은 주인 컴퓨터의 뇌(커널)를 빌려 쓰는 방식이다.
즉, Docker 컨테이너 안에는 뇌(커널)는 빠져있고 오직 껍데기(User Space)만 들어있다. ( 커널이 빠져있으니까 가벼운 것이다 .. )
그럼 여기서 "우분투랑 센토스랑 OS가 다른데 어떻게 뇌(커널)를 공유해?" 라는 의문이 들 수 있다.
사실 이 녀석들은 모두 '리눅스(Linux)'라는 똑같은 커널을 공유하는 형제들이다. 자동차로 비유하자면 엔진(커널)은 똑같고, 내장 인테리어(배포판)만 다른 셈이다.
그렇기 때문에 굳이 무거운 엔진을 또 설치할 필요 없이, 내 컴퓨터의 커널을 공유하면서
옷(이미지)만 갈아입혀서 실행하면 되는 것이다.
이게 바로 Docker가 가볍고 빠른 이유다.
다시 한번 정리하자면 'Docker란, OS를 새로 설치하는 게 아니라 호스트의 커널을 공유하면서
프로세스만 격리하여 실행하는 기술'이라고 할 수 있다.