핵심 요약
인포그랩이 Docker 컨테이너의 네임스페이스와 cgroup을 활용한 자원 격리·제한 실습과 네트워크 분리 방법을 상세히 제시했습니다.
구현 방법
- 리눅스 네임스페이스 격리: unshare 명령으로 PID, 네트워크 등 필요한 네임스페이스를 생성하고 격리된 환경에서 프로그램 실행. PID 네임스페이스를 통한 독립 프로세스 트리 구성 확인.
- 네트워크 격리 및 브리지 구성: 두 개의 네임스페이스(ns1, ns2)와 veth 쌍을 연결하고 브리지(br0)를 구성한 뒤, ns 내부에 IP를 부여하고 기본 게이트웨이를 설정해 네트워크 격리 및 통신 확인.
- 자원 관리: cgroups를 통한 메모리/CPU 제어를 설정하고, 메모리 limit(150MB) 및 CPU(50% 코어) 제한 적용 여부를 실습. CPU/메모리 사용 스크립트 실행과 로그를 통해 제어 효과를 확인.
- Docker 자동화: Docker로 CPU 0.5코어, 메모리 200MB 컨테이너를 실행하고 자원 제어를 자동으로 확인. 컨테이너의 /proc/self/cgroup 및 cgroup 설정 파일에서 실제 적용 확인.
주요 결과
- 네트워크 격리: ns1→브리지→ns2 및 호스트 간 양방향 핑 테스트가 정상적으로 동작하여 네트워크 격리가 올바르게 구성되었음을 확인.
- 메모리 제어: 메모리 한도 150MB에서 OOM 발생 및 프로세스 종료를 관찰했고, 현재 메모리 사용은 약 57MB, 최대 사용량은 약 149MB에 달함.
- CPU 제어: CPU 사용은 404 사이클 중 391회 제한(throttled)되었으며, 제한된 환경에서도 50% 대의 CPU 사용이 유지됨을 확인.
- Docker 자원 제어 시연: 컨테이너에서 메모리 200MB, CPU 0.5코어 제어가 정확히 적용되었고, 메모리 사용은 약 1.7MB 수준으로 초기 상태를 유지함. /sys/fs/cgroup의 설정값에서도 quota와 limit이 반영됨.
![[Windows 컨테이너] 2: Windows 컨테이너 개발 환경 구축하고 테스트하기 섬네일](https://tech.devsisters.com/opengraph.png)