Docker入門

Dockerの開発環境をローカル環境に構築する手順や、 Docker を使ったプログラムの記述方法や実行までをサンプルを使いながら順に学習していきます。

dockerのためのcgroup入門

cgroups概要

cgroupはリソースごとにコントローラーが存在し、コントローラーはcgroupfsという特別なファイルシステムを介して使います。 このファイルシステムは、ストレージデバイス上に存在するわけではなく、メモリ上にだけ存在します。

Ubuntu20.04では /sys/fs/cgroup ディレクトリ以下に、各コントローラーに対応するcgroupファイルシステムがマウントされています。

cgroupsは、Linuxカーネルの一部として提供されており、コマンドラインツール(通常は「cgroup-tools」パッケージに含まれています)やAPIを介して操作することができます。

cgroupsはファイルとして扱う

cgroupfsという名前の仮想ファイルシステムにディレクトリーを作成することにより、システム上の cgroup 階層を管理できます。

デフォルトのパスは/sys/fs/cgroup/です。

from https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/assembly_using-cgroupfs-to-manually-manage-cgroups_managing-monitoring-and-updating-the-kernel

新規プロセスを作ってみる

次のように、cgroup配下にフォルダーを作成することで新規プロセスを作成することができます。

mkdir /sys/fs/cgroup/Example/

/sys/fs/cgroup/Example/ ディレクトリーには、memory および pids コントローラー用のコントローラー固有のファイルも含まれます。

これらのファイルは、linux kernelに含まれる、cgroupsによって自動的に作成されたものです。

cat /sys/fs/cgroup/cgroup.controllers

実際にlinux環境下で上記のコマンドを打つとプロセスが見えると思います。

cgroup
cgroup

ブラウザを開いてcgroupsを見てみる。

1.まずはブラウザを開き、ターミナルでtopコマンドを入力します。

top

cgroup process確認
cgroup process確認

この時に開いたブラウザのPIDをtopで確認しましょう。 今回だと、PID:2331ですね。

2.PIDをメモしたらqを押してtopコマンドを終了します。

3./proc配下にあるプロセスを確認しょう。

cat /proc/2331/cgroup

プロセスが属する cgroup を表示するには、cat proc/<PID>/cgroup コマンドを実行します。

4./sys/fs/cgroup配下を調べる

先ほど調べた結果を、/sys/fs/cgroup配下で調べましょう。

プロセスに関する情報が記述されてますね!