근본적인 차이점은, VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면 컨테이너는 호스트 컴퓨터의 커널을 공유한다는 점이다.
1. 컴퓨터 부팅 과정
- BIOS 라고 하는 초기 프로그램을 실행한다.
- BIOS는 가용 메모리양을 파악하고, 네트워크 인터페이스들을 식별하고, 그 밖에 디스플레이나 키보드, 저장 장치 같은 여러 장치들을 탐지한다.
- 요즘은 이런 기능의 상당 부분을 UEFI가 담당하고 있다.
- 하드웨어 탐지 완료 후, 시스템은 부트로더를 실행한다.
- 부트로더는 운영체제의 커널 코드를 메모리에 적재해서 실행한다.
- 커널 코드는 응용 프로그램보다 높은 수준의 권한으로 실행된다.
- 커널이 메모리나 네트워크 인터페이스 등에 접근할 수 있는 것은 그런 권한 수준 덕분이다.
- 커널 코드는 CPU에서 기계어 명령의 형태로 실행된다.
- 초기화 과정에서 커널이 루트 파일 시스템을 마운트하고, 네트워킹 기능을 준비하고, 필요한 시스템 데몬들을 띄운다는 점만 알면 된다.
- 커널 초기화가 끝나면 사용자 공간에서 프로그램을 실행할 수 있게 된다.
- 커널은 사용자 공간 프로그램이 필요로 하는 모든 것을 관리하는 책임을 진다.
- 커널은 각 프로세스에 메모리 블록을 배정하고, 프로세스가 다른 프로세스의 메모리 블록에 접근하지 못하게 한다.
2. VMM의 등장
- 보통의 설정에서는 커널이 컴퓨터의 자원들을 직접 관리하지만, VM의 세계에서는 자원 관리의 일차적인 책임은 VMM이 맡는다.
- 자원들을 분할해서 VM들에 배정하는 것은 VMM이다.
- 각 VM은 자신만의 커널을 가진다.
- VMM은 자신이 관리하는 VM들 각각에 일정한 양의 메모리와 CPU 자원을 배정하고, 가상 네트워크 인터페이스를 비롯한 여러 가상 장치들을 설정하고, 각각 그 자원들에만 접근할 수 있는 게스트 커널을 실행한다.
- 게스트 커널은 자신이 물리적 메모리와 장치들에 직접 접근한다고 생각하지만, 실제로는 VMM이 제공한 추상에 접근하는 것일 뿐이다.
- 게스트 OS와 그 응용프로그램들이 자신에게 할당된 자원의 경계를 넘지 못하게 하는 것은 VMM의 책임이다.
3. VM의 단점
- VM을 시동하는 데 컨테이너보다 시간이 훨씬 많이 걸린다.
- 느리고 번거롭다.
- 자원 사용 비용이 많이 든다.
'리눅스(Linux) > 컨테이너(Container)' 카테고리의 다른 글
[컨테이너] Container Layer 구조 (OverlayFS, 컨테이너 이미지 구조) (0) | 2023.08.15 |
---|---|
리눅스의 컨테이너 격리 (cgroups, namespace) (1) | 2023.07.28 |
[Docker] docker inspect (0) | 2021.09.11 |
[도커] 스웜모드 & 스웜모드의서비스 장애 복구 & 서비스 컨테이너에 설정 정보 전달(secret,config) & 도커 스웜 네트워크 & 서비스 디스커버리 (0) | 2020.09.19 |
[도커] 쉘스크립트에 도커 명령어 작성 & Docker compose & swarm (0) | 2020.09.16 |