컨테이너와 VM의 차이
https://velog.io/@kdaeyeop/도커-Docker-와-VM의-차이


컨테이너 내 Guest OS의 유무이다. 자원 효율성이 더 좋다. - 메모리 절약, 단일 커널을 통한 CPU 사용시간 조정
컨테이너끼리는 커널의 OS(Docker Engine의 Guest OS)를 공유한다. 따라서 호스트 시스템(Docker Engine의 Linux 커널)에서 컨테이너 내부의 프로세스에 접근할 수 있다.
컨테이너(Docker) 구현
https://80000coding.oopy.io/7f4fd1ab-974a-408d-8e12-28dfddae761b
리눅스 컨테이너를 구현하려면 리눅스 시스템 콜인 chroot나 네임스페이스, cgroup, 유니온 마운트 등의 기능을 활용해야 한다. cgroup은 특정 프로세스들에 할당되는 '자원'을 제한하는 기능, namspace는 특정 프로세스들이 다른 프로세스를 참조할 수 있는 '범위'를 제한하는 기능이라고 보면 쉽다.
- cgroup(control group): CPU 시간, 시스템 메모리, 네트워크 대역폭 등의 자원을 프로세스 그룹 단위로 제어하는 리눅스 커널의 기능이다.
- namespace: 같은 이름의 함수나 변수 등도 각기의 프로세스에서는 유일하고 독립적인 존재로 만들어 주는 개념이라 보면 된다.
- union mount: 통합이란 뜻의 union과 물리자원을 디렉토리에 연결하는 과정인 mount의 합성어로 여러 디렉토리를 한 마운트에서 표현되도록 겹쳐 놓은 것을 말한다.
- chroot: 프로세스가 실행되는 루트를 변경하는 시스템콜이다. 유닉스 계열 OS의 파일시스템은 root(/) 디렉토리를 기준으로 다른 파일을들 탐색할 수 있는데, 어떤 A라는 프로세스를 '/'가 아닌 그 밑의 특정 디렉토리를 루트디렉토리로 가지게 만들면 A프로세스는 '/'를 root로 가지는 다른 파일에 접근할 수 없게된다.