Featured image of post Dockerのマルチステージビルドで特定のステージを指定する方法

Dockerのマルチステージビルドで特定のステージを指定する方法

Twitter ツイート Hatena Bookmark ブックマーク

Dockerのマルチステージビルド([Multi-stage builds])(https://docs.docker.com/build/building/multi-stage/)で複数のステージを用意する場合があります。
マルチステージビルドを使うことで、一つのDockerfile内で複数のビルドステージを管理し、最終的なイメージサイズを小さく保つことができます。

今回はstaging, prodcution環境でステージを分けてビルドしたいということがありました。 最初は複数のDockerファイルを用意しようと思いましたが、コピペの嵐になってメンテナンスが地獄になることが予想できていました…。

調べたところDocker Buildには --target オプションというものがあり、ステージを指定できてビルド出来ます。
Specifying target build stage (–target)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ビルド環境
FROM golang:1.13 AS build-env
WORKDIR /app
COPY . .
RUN go build -o myapp

# ステージング用環境
FROM alpine:latest as stg
WORKDIR /app

ENV API_URL 'https://polidog.jp/stg/api'

COPY --from=build-env /app/myapp .
CMD ["./myapp"]


# 実行環境
FROM alpine:latest as prod
WORKDIR /app

ENV API_URL 'https://polidog.jp/api'

COPY --from=build-env /app/myapp .
CMD ["./myapp"]

こんな感じのDockerfileある場合にステージング環境のステージをビルドしたい場合は以下のようにします。

1
$ docker build --target stg -t myapp-build .

まじで知らなかった…。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。