次のようにC言語で単純なコンテナを作成しました。この記事(アフィリエイトされていません)素晴らしい動作します。コンテナは、マウント、UTS、IPC、PID、および cgroup 名前空間を分離します (clone(2) 経由)。
まだ理解していない1つ: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
まだホストの合計メモリ量(4 GBなど)を表示します。
同様に、子プロセスを新しいCPUサブグループに入れてCPU使用率を制限できますが、htop
ホストの合計CPU(およびその負荷)を表示できます。
コンテナの「表示される」メモリ量とCPUの優先度をどのように制限する必要がありますか? DockerとLXCの両方がこの点で良い役割を果たしているようです。