13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerfileが技術的負債になる前にラベルを付けよう

Last updated at Posted at 2018-03-13

そのベースイメージはどのリポジトリで管理されてるの?

Dockerfileを分割管理したまでは良かったけれど、久々にベースのimageを更新しようとしたら、リポジトリどれだっけ?となり、時間を浪費したので解決策を共有します。

リポジトリのURLをLABELとして明示的に記載しよう

LABELはmaintainerだけ書くとこじゃないですよ。せっかくkey-value形式で何でも書けるので、後悔しないためにもここに運用上必要な情報を記載しておくことをオススメします。

公式のドキュメントによると、キーが被らないようにドメイン名をひっくり返した値をプレフィックスとして使うよう推奨されています。Javaのパッケージ名と同じですね。

例として、プロジェクト内でベースイメージとして使っているjava-baseと、アプリ用のイメージappのDockerfileがあるとします。ドメイン名がtakitake.techだとしたら、tech.takitakeがプレフィックスとなります。

ベースイメージ

Dockerfile.base
FROM openjdk:9-jre
LABEL tech.takitake.base.image.source=http://takitake.tech/base-image.git
$ docker build -t takitake/java-base -f Dockerfile.base .

すると、ベースイメージのラベルは以下のようになります。

$ docker inspect takitake/java-base:latest | jq '.[0].Config.Labels'
{
  "tech.takitake.base.image.source": "http://takitake.tech/base-image.git"
}

アプリイメージ

Dockerfile.app
FROM takitake/java-base
LABEL tech.takitake.app.image.source=http://takitake.tech/app-image.git
$ docker build -t takitake/app -f Dockerfile.app .

そして、最終的なラベルは以下のようになります。

$ docker inspect takitake/app:latest | jq '.[0].Config.Labels'
{
  "tech.takitake.app.image.source": "http://takitake.tech/app-image.git",
  "tech.takitake.base.image.source": "http://takitake.tech/base-image.git"
}

これで、アプリイメージのラベルを確認するだけで、ベースとアプリそれぞれのリポジトリが簡単に確認することができるようになりました。この調子で、ビルドジョブのURL等もラベルとして記載して辛くない運用ライフを送りましょう。

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?