第3章 ラベル

ラベルを使用すると、ラベルが存在する以前に必要であった手間のかかる設定手順が不要になります。これらの設定手順には、コンテナーが特権コンテナーとして実行する必要があるかどうかを確認することも含まれました。

これまでは、この種の設定手順を把握した上でコンテナーごとに多大な労力を要する設定作業が必要でした。ただし、コンテナーを定義する .json ファイルの一部であるラベルにより、この情報が docker に提供されるようになりました。ラベルは、docker で利用可能な通常のメタデータに基づいて作成されます。

「ラベル」は docker メタデータに基づいて作成されるオープン標準です。docker には、名前と値のペアをコンテナーに追加できる機能があります。ラベルは、この名前と値のペアのコンテナーへの挿入を可能にする機能を使用して作成されます。

3.1. ラベルのサンプル

ラベルを使用すると、ゴール達成までにコマンドラインに入力しなければならないすべての詳細を把握しておく必要がなくなります。以下の例は、ラベルの性質と機能を理解するのに役立ちます。

ここでは、一定の意味を持つ「run labels」を作成します。

GPU アクセラレーションと pulse audio 搭載の Chrome を実行するとします。これを実行するには、コンテナーが GPU にアクセスできる必要があります。それ自体は難しいことではありませんが、「合成 (composition)」について理解する必要があります。これを説明するために、ここでは連携する X11 と Window Manager の例を使用します。これらの 2 つのプログラムを最も効率よく連携させる方法として、合成要素のすべてのプログラムの書き込み先となる 1 つの大きなフレームバッファーを作成できます。これは、次のような非常に長いコマンドを使用して処理されます。

$ sudo docker run -v /dev/dri:/dev/dri \
-v /dev/snd:/dev/snd \
-v /dev/shm:/shm \
-­ipc=container:foo_bar \
-­privileged -e 'DISPLAY=:0' \
-u username fedora_chrome google-chrome

以下は内訳になります。

-v /dev/dri:/dev/dri
ビデオカードコンポーネント
-v /dev/snd:/dev/snd
サウンドカードコンポーネント
-v /dev/shm:/dev/shm
共有メモリー
shm
共有メモリー
-­ipc
プロセス間通信

container:foo_bar は、このラベルが「 foo_bar」と呼ばれる別の実行中のコンテナーを参照することを意味します。これは実行中のコンテナー foo_bar を実行中のコンテナー fedora_chrome にリンクします。この引数は 2 つのコンテナーのプロセス間通信の名前空間を共有し、2 つのコンテナーが同じオブジェクトを参照し、2 つのコンテナーのそれぞれがそれらのオブジェクトを参照するために同じ名前を使用するようにします。これは、それらの通信が /dev/shm で実行されるために重要となります。

共有メモリーはプロセス間通信に必要な 1 つの手段です。

-e 'DISPLAY=:0'
出力の移動先の X11 ディスプレイ
-u username
ユーザー名を指定します。
fedora_chrome
コンテナーの名前です。
google-chrome
コンテナーが実行するコマンドです。