LoginSignup
18
9

More than 5 years have passed since last update.

dockerをbuildする際のMakefile

Posted at

はじめに

この記事は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ビルドしています。

18
9
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
18
9