Help us understand the problem. What is going on with this article?

dockerをbuildする際のMakefile

More than 1 year has passed since last update.

はじめに

この記事はMicroAd Advent Calendar 2017の21日目の記事です。

個人用でDockerイメージをビルドする場合はdockerhubに連携すればチョロで終わるんですが、仕事用だとプライベートレジストリにPushする必要があったり、タグを色々つけたりと何かと面倒が多いです。

ということで、ビルド手順をMakeでラップすることが多いのですが、そんなMakefileの一例のご紹介です。

Dokerfile

echoするだけの単純なDockerImageを前提に説明します。

FROM alpine:3.6

ENTRYPOINT ["/bin/echo"]

ARG GIT_REVISION=unkown
ARG GIT_ORIGIN=unkown
ARG IMAGE_NAME=unkown
LABEL git-revision=$GIT_REVISION \
      git-origin=$GIT_ORIGIN \
      image-name=$IMAGE_NAME

ARGとLABELをつかってビルド時に情報埋め込んでます。
イメージの出処をわかりやすくするのが目的です。LABELの値はロギング・ドライバを通じてfluentdに渡せるので、いつのリビジョンでなんのイメージのログか?という情報が集約した際にわかりやすくなります。
ちなみに、Docker公式ではラベルには自分達のドメインのFQDNの逆順に名前空間を切って命名すること推奨しているのですが、私の場合Hiveにログを突っ込むケースがあるため、カラム名=ラベル名にドットを入れたくないという事情があり、推奨とは反したラベル名にしています。

Makefile

NAME         := echo
REVISION     := $(shell git rev-parse --short HEAD)
ORIGIN       := $(shell git remote get-url origin)
TAGS         := $(REVISION)
RELEASE_TAGS := $(REVISION) 3.6 production
REGISTRY     := your.docker.registry.local
USER         := yourspace

.PHONY: build
build:
    docker build \
        --build-arg GIT_REVISION=$(REVISION) \
        --build-arg GIT_ORIGIN=$(ORIGIN) \
        --build-arg IMAGE_NAME=$(REGISTRY)/$(USER)/$(NAME) \
        $(addprefix -t $(REGISTRY)/$(USER)/$(NAME):,$(TAGS)) .

.PHONY: push
push:
    @for TAG in $(TAGS); do\
        docker push $(REGISTRY)/$(USER)/$(NAME):$$TAG; \
    done

.PHONY: release
release:
    @make build TAGS="$(RELEASE_TAGS)"
    @make push  TAGS="$(RELEASE_TAGS)"

MakefileではDockerで定義しているARGにビルド情報を渡しています。
また複数のタグをつけれるようにします。
gitのリビジョン、メインとなるミドルウェアのバージョン(3.6)、リリース用のエイリアス(production)でタグをつけることが多いです。
dockerのイメージタグをTAGSとRELEASE_TAGSで2箇所定義している理由としては、CI実行時においてテスト時はリビジョンタグのイメージのみをビルド、プッシュ、テストをして問題なければ、リリース時にリリース用のタグを諸々つけてビルド、プッシュする、みたいなのを実現するためです。

おわりに

以上、こんな感じでDockerビルドしています。

kanga
うさんくさいインフラエンジニア
http://kangaat.hatenablog.com/
speee
株式会社Speeeは「解き尽くす。未来を引きよせる。」というミッションを実現すべく、中長期的な目線で企業価値を最大化させていくため、組織・事業のStyleを大切にした永続的な価値創造を目指しています。
https://www.speee.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした