Dockerイメージから特定のラベルがあるか判定する

スポンサーリンク

はじめに

Dockerイメージから特定のラベルが含まれているか判定する方法を解説します。

Dockerのラベル

まず、そもそもDockerのラベルについて、簡単に解説します。

Dockerのラベルは、イメージやコンテナに付与できるメタデータです。Dockerfileでは、LABELというインストラクションで設定できます。

Docker object labels
Description of labels, which are used to manage metadata on Docker objects.

このDockerのラベルですが、OCI Image Specificationではアノテーション(Annotation)と呼ばれています。

image-spec/annotations.md at main · opencontainers/image-spec
OCI Image Format. Contribute to opencontainers/image-spec development by creating an account on GitHub.

特定のラベルがあるか判定

一覧を取得する

docker inspectjqコマンドでラベル一覧を取得できます。

docker inspect <image name or image ID> --format="{{json .Config.Labels}}" | jq
❯ docker inspect nginx --format="{{json .Config.Labels}}" | jq
{
  "maintainer": "NGINX Docker Maintainers <[email protected]>"
}

見つからない場合にエラーコードを返す

さらにgrepコマンドを使うことで、見つからない場合にエラーコード1を返すようにできます。

docker inspect <image name or image ID> --format="{{json .Config.Labels}}" | jq | grep <pattern>

echo $?で確認すると、マッチするラベルがあれば0を、見つからない場合は1が返ってきていることが確認できます。

❯ docker inspect nginx --format="{{json .Config.Labels}}" | jq | grep hoge

❯ echo $?
1

❯ docker inspect nginx --format="{{json .Config.Labels}}" | jq | grep maintainer
  "maintainer": "NGINX Docker Maintainers <[email protected]>"

❯ echo $?
0

参考

タイトルとURLをコピーしました