굳이 개념을 정리한다면 기존의 Hypervisor 가상화와는 달리 Container 가상화 방식이다. 사실 어려운 개념이었다. 기존의 VMWare 같은 Hypervisor 방식을 잘 모르기 때문에 사실 구분하기도 어렵다. 이 부분은 VMWare를 한 번이라도 써본 사람은 이해가 조금 빠를 것 같다. 우선 양쪽의 내부 구조를 보면 조금 더 이해가 쉬울 것 같다.
도커 공식문서에 따르면 VM 시스템은 가상 머신 (VM)은 하나의 서버를 여러 서버로 전환하는 물리적 하드웨어의 추상화입니다. 하이퍼 바이저를 사용하면 단일 시스템에서 여러 VM을 실행할 수 있습니다. 각 VM에는 운영 체제, 애플리케이션, 필요한 바이너리 및 라이브러리의 전체 사본이 포함되며 수십 GB를 차지합니다. VM은 부팅 속도가 느릴 수도 있습니다. 요약을 해보면 Hypervisor 가상화의 장점은 CPU를 idle 상태로 두지 않기 때문에 효율적이지만 단점으로는 각기 다른 OS를 사용하기에 무겁다.
Container 시스템은 컨테이너는 코드와 종속성을 함께 패키징하는 앱 계층의 추상화입니다. 여러 컨테이너가 동일한 컴퓨터에서 실행되고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각 컨테이너는 사용자 공간에서 격리된 프로세스로 실행됩니다. 컨테이너는 VM보다 공간을 덜 차지하고 (컨테이너 이미지는 일반적으로 수십 MB 크기) 더 많은 애플리케이션을 처리할 수 있으며 더 적은 수의 VM과 운영 체제를 필요로 합니다. 요약을 해보면 장점은 같은 OS를 공유하기 때문에 상대적으로 공간을 덜 차지하고 더 많은 어플리케이션을 처리할 수 있으면 속도 또한 더 빠르다.
이렇게 정리할 수 있을 것 같다.
그럼 우린 왜 Docker Container를 사용해아하나? 안 써본 입장에선 잘 이해가가지 않을 것이다.
컨테이너는 환경에 구애 받지 않고 어플리케이션을 실행하는 기술이다. 아마 많은 OS를 사용해본 개발자들은 알 것 이다. 센트OS, 우분투, 리눅스 등등의 OS를 사용하다보면 같은 명령인데 명령어가 다르다. 심지어 설치 명령 또한 다르며 깃허브, Node.js 등의 설치 프로그램 또한 설치하는 방법이 다르다. 그러나 Docker가 설치되어 있다면 어느 환경이든 상관 없이 일관된 명령어로 실행할 수 있다. (그저 운영체제별로 존재하는 복잡한 설치 과정을 겪지 않는다는 점만 기억하면 된다.)