[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

https://github.com/hadolint/hadolint

https://qiita.com/shinya_sun_sun/items/a2e762e1520509adc16d

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*