본문으로 바로가기

컨테이너는 Host OS의 커널을 공유하며 하나의 프로세스로서 격리된다. 

Docker container가 기존의 VM(가상머신)과 비교하여 가상화 측면에서 어떻게 다른지는 (https://www.leafcats.com/301) 를 참조 바란다.

 

그렇다면 리눅스 OS 환경에서 어떻게 하나의 프로세스가 커널을 공유하면서 가상화 될 수 있는걸까?

컨테이너는 다음 두가지를 사용해 컨테이너 프로세스를 격리한다.

 

첫 번째로는 리눅스 네임스페이스(namespace)로 각각 컨테이너에서 실행된 프로세스가 시스템(user, 파일, 네트워크, 호스트명, 프로세스 등)에 대해서 독립되어 볼 수 있도록 구현해 준다.

그 다음으로는 리눅스의 cgroups를 사용해 각각의 컨테이너(프로세스)가 사용할 수 있는 시스템 리소스(CPU, 메모리, network bandwidth)를 제한해 준다. cgroups으로 리소스 사용이 제한된 각 컨테이너는 다른 컨테이너에게 예약된 리소스를 사용할 수 없다. 이는 해당 프로세스가 별도의 OS에서 실행될 때와 비슷한 효과를 줄 수 있다.

 

namespace와 cgroups. 이 두 가지로 각 컨테이너는 Host, 그리고 다른 컨테이너들과 OS 커널을 공유하면서도 격리된 것처럼 사용할 수 있게 된다.

 Other Contents 

댓글을 달아 주세요