[0]
가상화의 방법 중, 컨테이너와 VM(Virtual Machine)의 차이에 대해 알아본다.
[1]
우선 가상화(virtualization)란 무엇인지에 대해 간단히 짚고 넘어가자. 가상화는 하드웨어 리소스를 추상적으로 표현하여 사용하는 것을 말한다. 예컨대 가상 메모리라고 하면, 메모리라는 하드웨어 리소스를 추상적으로 표현하여 사용한다. 즉, 실제 메모리(물리 메모리)를 추상화하여 새로운 계층인 가상 메모리를 만들어 낸다. 추상 계층이 1단계 늘어났기 때문에 메모리에 접근할 때는 가상 메모리 -> 물리 메모리의 형태가 되고, 프로그래머는 물리 메모리의 특성에 대해 알 필요가 없게 된다. 또한 가상화 덕분에 수많은 장점(가용성 증가 등)이 부가적으로 생길 수 있다.
[2] VM의 경우
VM의 구현 방법에 따라 다르지만, 기본적으로 하이퍼바이저가, 여러개의 VM을 띄우고 실행한다. 이때 중요한 것은 각 VM마다 독립된 실행 환경을 제공한다는 것이다. 즉 VM1과 VM2가 동일한 OS를 사용한다고 하더라도, 데이터는 물론이고 코드도 전혀 공유하여 사용하지 않는다. 이로 인해 각 VM마다 최소 GB 단위의 공간이 필요하며, VM 수에 비례해서 늘어나게 된다. 퍼포먼스 오버헤드도 상당하다. 하드웨어까지 가상화하는 전가상화(full-virtualization)이냐 그렇지 않은 반가상화(para-virtualization)이냐에 따라 다르지만, 보통 부팅 시에 상당한 시간이 소요된다.
[3] Docker 컨테이너
Docker의 컨테이너는 독립된 실행환경을 제공하지 않는다. 즉 OS의 많은 자원들을 컨테이너들끼리 공유한다. 덕분에 부팅시간이 훨씬 짧고, 컨테이너 개수가 늘어나더라도 디스크 공간을 많이 차지하지 않는다. 또한, 컨테이너가 완전히 독립된 실행환경을 제공하지 않고 공유한다고 하더라도, 각 컨테이너 내의 프로세스들은 이를 감지하지 못하고, 자신이 OS의 모든 자원을 독점하고 있다고 생각한다.
[이미지 출처]
[참고]
https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine
https://www.quora.com/How-are-virtualization-and-abstraction-related
'Computer Science > General' 카테고리의 다른 글
비동기적(asynchronous) 실행과 동기적(synchronous) 실행의 차이 (0) | 2020.02.20 |
---|---|
pass-by-value 와 pass-by-reference (0) | 2020.01.03 |
메모리 : 힙과 스택의 차이 (0) | 2019.10.15 |
c++에서 레퍼런스와 포인터의 차이 (0) | 2019.09.22 |
수학의 함수와 프로그래밍에서의 함수의 차이 (0) | 2019.09.07 |