[A-00242] Docker 1000本ノック (1)
1000本ノックシリーズのDocker編です。
今回はマルチステージビルドを使ってみます。
下記のgithubソースコードをダウンロードしてappというフォルダ名に修正してDockerfileと同じ場所に置いておきます。
https://github.com/gothinkster/golang-gin-realworld-example-app
# syntax=docker/dockerfile:1
FROM golang:1.20-alpine3.17 AS builder
RUN apk update && apk add --no-cache gcc musl-dev sqlite-dev
WORKDIR /app
COPY ./app/go.mod ./app/go.sum ./app/hello.go ./app/doc.go ./
COPY ./app/common ./common
COPY ./app/users ./users
COPY ./app/articles ./articles
RUN go mod download
RUN GOOS=linux go build -o ./realworld
## 2nd stage
FROM alpine:3.17
WORKDIR /app
COPY --from=builder /app/realworld .
EXPOSE 8080
CMD [ "./realworld" ]
下記のコマンドでイメージをビルドします。
docker build -t multi-realworld-app .
イメージが軽量な事が特徴であるマルチステージビルド。イメージのサイズを確認します。
user@usernoMacBook-Pro go-sample1 % docker images -f=reference='*realworld-app'
REPOSITORY TAG IMAGE ID CREATED SIZE
multi-realworld-app latest c7e8126a335a 8 minutes ago 26.3MB
1st stageのイメージだと700MBを超えるようですが2nd Stageのイメージは30MB未満となりかなり軽量です。
積極的に使用していきたいですね。
・Appendix
参考文献はこちら
https://zenn.dev/hakshu/articles/docker-multi-stage-build
https://github.com/gothinkster/golang-gin-realworld-example-app
コメントを残す