도움코딩

도커와 가상머신의 차이

이소금 2020. 5. 3. 00:23
반응형

도커와 가상머신의 차이에 대해서 이해한 내용을 정리해 보겠습니다.

일단 도커와 가상머신의 개념은 비슷합니다. 하나의 운영체제 위해서 가상의 독립적인 환경을 제공해 주는 것입니다. 그래서 그 각각의 환경들은 서로 관여할 수 없게 되어 프로그램이나 어플리케이션에 있어 서로의 간섭 없이 편리하게 운용할수 있게 되는 것이죠. 그럼 왜 도커가 가상머신보다 더 빠르다는 것일까요?

일반 컴퓨터 구조도

일반 컴퓨터를 간단하게 도식화하면 이렇습니다. 하드웨어 위에 운영체제가 얹혀 그 위로 어플리케이션이나 소프트웨어가 동작하는 것이죠. 

그런데, 이렇게 하나의 OS 위에서 여러개의 어플리케이션이 동작하는데, 예를 들어 App1은 파이썬 버전 3을 요구하고, App2는 버전 2를 요구하게 된다면 매번 특정 App을 구동할 때 마다 버전 충돌이 나서 복잡해지게 되는 것이죠. 이런 문제를 해결하기 위하여 하드웨어 스택을 가상화하자는 가상머신이라는 것이 처음 등장하게 됩니다.

여기서 가상화단일 물리 하드웨어 시스템에서 여러 시뮬레이션 환경 및 전용 리소스 생성을 가능하게 해주는 것입니다.

가상머신

여기서 하이퍼 바이저Hypervisor 라는 층이 생기게 됩니다. 가상 머신 모니터라고도 불리며 이는 호스트 컴퓨터 1대에서 다수의 운영체제를 동시에 실행 가능하게 해주는 가상 플랫폼 기술을 말합니다. 이 하이퍼 바이저는 높은 수준의 관리 및 모니터링 도구 인터페이스를 제공하는 것 뿐만이 아니라, 운영체제 간 서로 방해하지 못하게 하여 가상머신에 대한 자원 및 메모리 할당을 직접 맡아서 처리하는 역할을 하게 됩니다. 그러니, 하이퍼 바이저라는 층이 없으면 가상 머신이 존재할 수 없게 되는 것이죠.

어떤 사람이 App1을 같이 개발하자고 합니다. 나는 맥을 쓰는데, 그 사람은 윈도우를 씁니다. 운영체제가 다르죠. 실행 환경을 같게 해주려면 내가 사용하는 App1의 라이브러리나 가상 환경의 실행 환경에 대한 정보를 제공하여 상대의 가상 환경을 같게 해주면 해결이 될 겁니다.

이 정보를 이미지화 하여 이미지파일을 상대에게 제공하는 겁니다. 이 구축한 가상머신 이미지는 여러 서버에 복사 및 실행도 가능하며, 이미지 하나당 여러 서버를 증설 가능합니다. 이런 가상화 기술을 이용하여 서버를 임대해주는 것이 곧 클라우드 기술이 되는 것입니다.

그러나 가상머신은 온전한 가상의 컴퓨터를 물리적 컴퓨터 위에 띄우는 기술입니다. 그 말은 곧, 가상 머신에는 항상 게스트 운영체제가 존재해야 한다는 말입니다. 이걸 이미지화 한다는 것은, 이미지 파일에 운영체제도 포함이 되는 것이고, 이는 곧 용량의 증가를 의미합니다. 이미지 파일이 커지게 되면 네트워크로 이미지를 주고받기가 힘들어지고 이는 곧 성능 저하로 이어지게 됩니다.

그럼 성능 저하를 해결하기 위해서는 어떻게 할까? 이미지 파일에 포함된 운영체제만 빼고 나머지만 공유하면 해결될 일이죠. 여기에서 리눅스 컨테이너의 개념이 생겨나게 됩니다. 컨테이너 안의 가상공간 및 실행 파일을 호스트가 직접 실행하는 것이죠.

도커 원리

호스트가 직접 실행한다? 이게 무슨 말이냐, 가상의 운영체제가 아닌, 기존 컴퓨터가 가지고 있는 운영체제 커널을 컨테이너들이 공유하는 개념입니다. 그러나, 각각의 컨테이너들은 격리됩니다. 각각의 컨테이너들끼리는 서로 간섭하지 않으나 운영체제는 공유해서 사용하는 것이죠. 그리고 이 각각의 컨테이너들을 이미지화 하면 운영체제의 정보는 포함되지 않기 때문에 성능 면에서도 월등히 차이가 나게 되는 것입니다. 이를 가능하게 해주는 것이 리눅스 컨테이너 기반 도커 엔진, 호스트 운영체제와 컨테이너 사이에 존재하며 컨테이너를 생성 및 제거 등 운영에 전반적인 관여를 하며 운영체제를 공유할 수 있게 해주는 것입니다.

컨테이너는 개별 소프트웨어의 실행에 필요한 실행환경을 독립적으로 운영할 수 있게 해주고, 이 실행의 독립성은 곧 운영체제 수준의 격리 기술을 의미하는 것이며 어플리케이션을 구동 환경으로부터 추상화 할 수 있게 해줍니다.

소프트웨어 서비스 구동을 위한 격리 환경을 제공한다라는 것은 이에 관련된 라이브러리나 종속 항목을 제공한다 라는 의미와 같습니다.

여기서 커널이란, 하드웨어와 응용 프로그램 사이 인터페이스를 제공함으로써 응용 프로그램이 하드웨어에서 오는 자원을 사용 및 관리가 가능하게끔 해주는 것입니다. 즉, CPU를 제어하는 소프트웨어입니다.

커널

그러니까, 가상머신은 하드웨어 스택을 가상화 하는 기술이고, 컨테이너는 운영체제 수준에서 가상화 하는 기술입니다. 이런 차이가 있기 때문에 도커의 기술이 각광받게 되는 것이죠. 도커 웹사이트에 가면 다른 사람들이 올려둔 많은 오픈소스 이미지 파일들이 있습니다. 이를 활용하여 환경 구축에 시간 쏟지 말고 내 컴퓨터에 빠르게 실행 환경을 조성하여 공부에 집중해 봅시다!

반응형

'도움코딩' 카테고리의 다른 글

RAR 파일 열기  (0) 2024.02.16
파싱이란  (0) 2020.05.09
웹의 정적 & 동적 콘텐츠 그리고 정적 + 동적 콘텐츠  (0) 2019.11.02
맥에서 RJava 설치  (0) 2019.10.20
맥에서 자바 설치경로 확인하기  (0) 2019.10.20