こんにちは。Яeiです。
今回は、現役エンジニアの私がDockerfileのLABELの書き方について記事にしようと思います。
メタデータを埋め込むための命令なのですが、そもそも何の役に立つのかを含めて解説していきたいと思います。
当記事は以下の公式リファレンスを元に記載しております。
Dockerfile reference >>
目次
結論:LABELの書き方
書き方は以下となります。
LABEL key=value key=value key=value …
LABEL命令ではイメージにメタデータを追加することができます。
詳細:LABELの書き方
前提知識(メタデータとは)
今回、コンテナイメージについて話しているのでコンテナイメージの話になりますが、
メタデータとは、コンテナイメージのデータになります。
現在、メタデータの設定内容としてよく見かけるのは以下くらいかなと思います。
maintainer
これはもともと、Dockerfileの方で設定可能だった命令の一つなのですが、LABELでの設定が推奨されて非推奨設定になりました。
Docker公式サイトでも曖昧な表現をされてます。
https://matsuand.github.io/docs.docker.jp.onthefly/config/labels-custom-metadata/
ラベルはさまざまな目的で利用することができます。 イメージを構成したり、ライセンス情報を記録したり、コンテナー、ボリューム、ネットワーク間の関係性を書きとめたりといったものです。 業務やアプリケーションにとって意義のあることなら、どのようなものでも含めて構いません。
LABELの使い方
LABEL key=value key=value key=value …
LABEL命令ではイメージにメタデータを追加することができます。
追加したメタデータはdocker inspectコマンドにて確認することができます。
例えば以下のようなDockefileを見てみましょう。
FROM nginx:latest
LABEL "maintainer"="rei"
LABEL "image_type"="baseimage"
このイメージをビルドしてdocker inspectで見てみましょう(抜粋)。
$ docker inspect test:latest
"Labels": {
"image_type": "baseimage",
"maintainer": "rei"
},
他にもLABELをつけておくことで、–filterオプションを付与することで絞り込みができたりもします。
$ docker images --filter "label=maintainer=rei"
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest 15da89a8a2e9 10 days ago 142MB
そのため、チーム開発などで利用する場合はLABEL付けのルールを作っておくと良いかもしれません。
正直なところ、LABELを有効活用できた経験は個人的には少ないです(使いこなせませんでした)。
ルール付けして最初は頑張ろうとしたこともあったのですが、面倒くさくなって、誰かが付け忘れ・・・むしろ足かせになったりしました。
イメージビルド用のシェルで決められたLABELを付与するくらいしか最終的に残りませんでした。
うまく使いこなせている方の情報は今後も調査していこうと思います。
当記事は以上となります。
LABEL命令はうまく使いこなせていなく、現状maintainer以外の情報は利用状況に応じてルール化するのが良いのではないでしょうか。
長々とお疲れさまでした。