내 잡다한 노트
도커 컨테이너와 VM의 차이 본문
먼저, 가상화란? -> 하나의 물리적 서버에서 여러 운영체제와 애플리케이션을 실행할 수 있도록 하는 기술
컨테이너나 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 |