프론트엔드 개발자 - 자곰

Docker

VM vs 도커 컨테이너

자곰 2023. 8. 4. 15:59

현대의 소프트웨어 개발과 배포는 점점 더 복잡하고 다양한 환경에서 이루어지고 있습니다. 개발자들은 이러한 다양성과 복잡성에 대응하는 방법을 찾고 있습니다. 이러한 문제를 해결하는 한 가지 강력한 기술이 바로 "컨테이너화(Containerization)"입니다.

애플리케이션과 그 종속성들을 격리된 환경에 배치하여 호스트 시스템과 분리함으로써 안정성과 이식성을 향상시키는 기술인 컨테이너에 대해 알아보고 그 이전의 기술은 VM에 대해서도 언급하고 비교해보며 도커에 대해 공부해보기로 하죠.

가상화 VM

원래 처음에는 하나의 서버에 하나의 어플리케이션만 구동시켰다고 합니다. 이렇다 보니 하나의 서버에 남는 비효율성을 있고 극복하기 위해 등장한 기술이 가상화 기술입니다. 그 중 하이퍼바이저 기반의 가상화가 가장 많이 이용되었고, 하이퍼바이저는 논리적으로 분할된 공간에서 VM 이라는 독립된 가상환경을 만들었습니다. 또한 VM은 게스트OS를 가지고 있어 설치가 필요합니다.

VM : 분할 공간에서의 가상환경, Virtual Machine

하이퍼바이저 : 게스트OS를 구동 및 모니터링

게스트 OS : VM 의 OS

VM은 한마디로 자원을 나눠서 쓸 수 있게 독립된 환경을 구성했다. 라고 이해하면 좋겠습니다.

VM  과 컨테이너 비교

먼저 비교하는 이미지를 보시면 가장 보이는 차이는 게스트OS 유무입니다. VM에서는 OS를 깔고 도커의 컨테이너는 깔지 않습니다. 그래서 자원 할당을 하고 어떤 걸 설치할 필요없이 어플리케이션을 돌릴 패키지만 설치하면 됩니다. 

도커의 컨테이너는 호스트 OS의 커널을 공유합니다. -> 커널을 공유한다? -> 호스트에서 컨테이너 내부를 볼 수 있다. 

💡 커널?
커널은 강력한 경영진(하드웨어)을 위해 일하는 바쁜 비서입니다. 사용자로부터 수신되는 메시지 및 요청(프로세스)을 cpu에 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 스케쥴링까지 해줍니다.

커널이 공유되어 호스트에서 컨테이너를 볼 수 있다면 이것을 독립된 공간인걸까?
사실 도커 컨테이너들은 Linux 커널을 사용하고 있다. Docker Engine은 일종의 VM이다. VM은 GuestOS를 가지고 있다고 말했다. Docker의 Guest OS가 바로 리눅스가 되고 이 위에 쌓이는 컨테이너에는 더이상 Guest OS가 깔리지 않으며 리눅스 커널을 통해 격리가 된다. 

Docker Host

Docker 는 그 자체로는 VM 이기 때문에 하이퍼바이저를 포함하고 있고 리눅스가 설치되어있지만 해당 컨테이너에는 VM Host와는 달리 OS가 설치되어 있지 않다.

이렇게 한번 VM은 무엇이고 컨테이너는 VM과 무엇이 다른지 간단하게 알아보았습니다. 
컨테이너 장점을 설명할까 하다가 컨테이너가 이식성, 속도, 성능 모두가 좋기 때문에 안 쓸이유가 없기 때문에 이론적 차이만 간단히 설명했습니다. 

요약하면,

VM과 컨테이너는 둘 다 가상화 기술이지만,

VM은 완전히 독립된 운영 체제를 가지고 무겁고 느리며,

컨테이너는 호스트 운영 체제의 커널을 공유하며 가볍고 빠른 실행이 가능합니다.

'Docker' 카테고리의 다른 글

도커 명령어 정리  (0) 2023.08.17
Dockerfile로 도커사용하기  (0) 2023.08.10
도커 명령어로 컨테이너 생성해보자  (0) 2023.08.08
도커 용어 및 개념 정리  (0) 2023.08.06