다음과 같이 C 언어로 간단한 컨테이너를 작성했습니다.이 기사(제휴되지 않음) 훌륭하게 작동합니다. 컨테이너는 마운트, UTS, IPC, PID 및 cgroup 네임스페이스를 분리합니다(clone(2)를 통해).
아직 파악하지 못한 한 가지: htop
및 유사한 유틸리티에 표시된 대로 컨테이너의 "표시되는 CPU 및 메모리"를 제한하고 싶습니다. 현재 구현에서는 다음 의사 코드에 표시된 대로 하위 항목(새 PID 네임스페이스의 PID 1)을 새 cgroup으로 이동합니다.
pid_t pid = fork();
# Child goes other stuff
mkdir /sys/fs/cgroup/memory/example
echo $pid > /sys/fs/cgroup/memory/example/cgroup.procs
echo 1073741824 > /sys/fs/cgroup/memory/example/memory.limit_in_bytes # 1 GiB
이제 하위 프로세스가 1GiB 이상의 메모리를 할당하려고 하면 해당 프로세스가 종료되는데 이는 예상된 동작입니다. 그러나 이와 같은 유틸리티는 htop
여전히 호스트의 전체 메모리 양(예: 4GB)을 표시합니다.
마찬가지로 하위 프로세스를 새 CPU 하위 그룹에 넣고 CPU 사용량을 제한할 수 있지만 htop
호스트의 총 CPU(및 해당 로드)를 표시할 수 있습니다.
컨테이너의 "표시되는" 메모리 양과 CPU 선호도를 어떻게 제한해야 합니까? Docker와 LXC 모두 이 점에서 좋은 역할을 하는 것 같습니다.