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의 커널에서 동작합니다.