[토막] VM과 Container 의 구분

Container

- 컨테이너는 리눅스 자체의 기술(LXC)이나 LXC를 활용하는 런타임 (예 : Docker) 등으로 HOST의 커널을 공유하여 격리 공간을 생성하는 하나의 프로세스입니다.
- 컨테이너에서 실행되는 하위 프로세스의 구분를 위해 Namespace 와 리소스 제한을 위한 cgroup 이는 리눅스 커널 능을 사용합니다.

#아래는 namespace Host 에서 별도분리 가능자원들입니다. 
HOST의 Linux 내 자원을 가상화합니다. VM 이 하드웨어 디바이스를 가상화하는 것과 구분되는 부분입니다.

pid
user
uts
ipc
mnt
net

#cgroup 격리된 프로세스에 대Host의 컴퓨팅 리소스를 제한할 수 있습니다.

Memory
CPU
Network
Device
I/O

- 컨테이너는 해당 Host의 프로세스이기 때문에, 리눅스 커널의 컨테이너는 Windows OS 컨테이너 만들 어렵습니다.
- Container 는 해당 Host의 커널에서 컨트롤이 가능하기 때문에 보안에 많이 신경써 니다.

VM

- VM 은 Host에 올린 Hypervisor 가상화 된 별개의 하드웨어 만든 후
그 위에 OS  올림 컨테이너보다 더 높은 격리 환경이고 볼 수 있습니다.
- Host의 커널이 아닌, 가상화 된 하드웨어 구성 위에 여러 Linux/Windows/Other Guest OS  설치하당 OS의 커널에서 동작합니다.