第3章 ラベル
ラベルを使用すると、コマンドをオプションとしてコマンドラインに追加する代わりに、コンテナーイメージにコマンドを埋め込むことができます。これらは通常、特定のコンテナーの実行に必要な複数のオプションを持つ docker コマンドであり、特権としてコンテナーを実行することが含まれます。オプションはコンテナーごとに処理され、コマンドが非常に長く、覚えにくくなる可能性があります。ラベルは、この情報を docker に提供する別の方法です。
ラベルは、Docker ですでに利用可能なメタデータ上に構築されます。このメタデータは、コンテナーを定義する .json ファイルに保存されます。Docker には、名前と値のペアをコンテナーに挿入できる機能のコンテナーやラベルビルドに名前と値のペアを配置することができる機能があります。
3.1. ラベルの例
ラベルを使用すると、コマンドラインでの長い docker コマンドの実行が容易になります。以下の例は、ラベルを理解するのに役立ちます。
ここでは、セマンティック意味を持つ "run labels" を作成します。
GPU アクセラレーションおよびピルスオーディオで Chrome ブラウザーを実行したいとします。これを実行するには、コンテナーが GPU にアクセスする必要があります。これは十分ですが、設定を検討する必要があります。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 rhel_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
- これはユーザー名を指定します。
rhel_chrome
- コンテナーの名前
google-chrome
- コンテナーを実行するコマンド