Docker가 어떻게 컨테이너 격리를 가능하게 하는지에 대한 메커니즘을 기록으로 남깁니다.
컨테이너란?
컨테이너는 응용 프로그램과 그 종속성을 격리된 환경에서 실행할 수 있도록 하는 기술입니다. 이를 통해 개발자와 시스템 관리자는 애플리케이션의 실행 환경을 보다 쉽게 구축, 관리, 배포할 수 있습니다.
Docker 컨테이너 격리 메커니즘
Docker는 리눅스 커널의 여러 기능을 활용하여 컨테이너 내의 프로세스를 호스트 시스템과 격리합니다. 주요 메커니즘은 다음과 같습니다
1. 네임스페이스 (Namespaces)
네임스페이스는 리눅스 커널의 기능으로, 프로세스와 시스템 리소스를 격리하여 독립된 환경을 제공합니다.
Docker는 네임스페이스를 사용하여 컨테이너 내의 프로세스가 호스트 시스템(파일, 프로세스, 네트워크 인터페이스, 호스트 이름 등)에 대한 독립된 뷰만 볼 수 있도록 합니다.
주요 네임스페이스 종류로는 PID, MNT, NET, UTS, IPC, USER 등이 있습니다.
2. 컨트롤 그룹 (cgroups)
컨트롤 그룹은 프로세스에 리소스 할당 및 사용에 대한 제한을 설정할 수 있게 하는 리눅스 커널 기능입니다.
Docker는 cgroups를 사용하여 컨테이너별 CPU, 메모리, 네트워크 대역폭 등의 리소스 사용을 제한하고 모니터링합니다.
3. 유니언 마운트 파일 시스템 (Union Mount Filesystem)
Docker는 여러 레이어로 구성된 이미지를 사용하여 컨테이너 파일 시스템을 생성합니다.
각 레이어는 변경사항만 저장하므로 효율적인 스토리지 사용이 가능하고, 컨테이너 간에 이미지 레이어를 공유할 수 있습니다.
유니언 파일 시스템은 겹쳐진 여러 레이어를 하나의 파일 시스템처럼 보이게 만듭니다.
대표적인 유니언 파일 시스템으로는 OverlayFS, AUFS, Btrfs 등이 있습니다.