내 잡다한 노트

도커 컨테이너와 VM의 차이 본문

DevOps/docker

도커 컨테이너와 VM의 차이

peanutwalnut 2024. 12. 5. 22:21

먼저, 가상화란? -> 하나의 물리적 서버에서 여러 운영체제와 애플리케이션을 실행할 수 있도록 하는 기술

 

컨테이너나 VM의 근본적인 기술은 가상화이다.

 

컨테이너는 호스트 OS 커널을 공유한다. 

그리고 컨테이너 간에는 프로세스 수준의 격리를 사용한다. (cgroups, namespaces )

 

그에 비해,

 

가상화는 하이퍼바이저 위에서 완전한 운영 체제를 실행한다. 

애플리케이션과 해당 OS를 모두 포함하므로 크기가 크다.

하드웨어만 공유를 하게 된다. (호스트 OS와 게스트 OS는 별개)

그리고, 각 VM은 하드웨어 수준에서 완전히 격리된다. 

 

둘은 성능의 차이도 나는데,

컨테이너는 호스트 OS 커널을 공유하므로 부팅 과정이 필요가 없고, 애플리케이션 수준에서 바로 실행이 가능하다.

또한, 가볍게 사용할 수 있다.

 

가상머신은 게스트 OS를 부팅해야 하므로 컨테이너보다 실행 속도가 느리고, 무겁다

 

 

그러면, 도커 컨테이너는 호스트 OS 커널을 공유한다고 했는데, 호스트 os가 우분투라면 어떻게 centos와 같은 다른 os의 이미지를 가진 컨테이너를 실행시킬 수 있는 것일까?

 

둘 다 Linux 커널을 기반으로 하는 운영체제이기 때문이다. 

CentOS와 Ubuntu 간의 user space 차이가 있더라도, 커널이 동일한 리눅스 커널 기반이기 때문에 system call을 처리하는 데 문제가 없다.

결국, 둘 모두 리눅스 커널 기반이기 때문에 가능한 일이다.

 

그러면 window에서 우분투 컨테이너를 사용할 때는?

window는 리눅스 기반의 커널이 아니기 때문에 WLS2를 통해 리눅스 컨테이너를 사용할 수 있다.

그래서 docker desktop을 설치할 때 WLS2도 같이 설치되는 이유가 그런 이유때문이다.

 

 

 

 

'DevOps > docker' 카테고리의 다른 글

Dockerfile 멀티 스테이지 빌드  (1) 2024.11.30
Dockerfile 최적화 방안  (0) 2024.11.30
도커파일에서 UID를 작성하는 이유  (0) 2024.11.26
DooD ( Docker out of Docker )  (0) 2024.11.19
도커파일 지시어 정리  (0) 2024.10.18