👌

Goのマルチステージビルドを使って、AWSやGCPなどの本番環境で動作するDockerfileを作成する

2023/11/12に公開

記事の内容

Goのマルチステージビルドを使って、本番環境(AWSやGCP)で動作するDockerfileを作成します。

記事を読むと得られるもの

  • マルチステージビルドを利用したDockerfileの作り方

対象読者

  • GoをDockerで動かしたい人

記事の長さ

1分で読めます

Dockerfileを作成する

.dockerignore

まずは、Dockerfileを作る前に、不要なファイルがDocker Imageに含まれないように、.dockerignoreファイルを作成します。

.dockerignore

.git

今回は、.gitファイルだけignore対象にしましたが、各個人の環境に応じてDockerファイルに必要のないファイルをignoreするようにしてください。

Dockerfileを作成

Docker Imageをbuildするために使うファイルは、Dockerfileというファイル名で作成します。

Dockerfile

FROM golang:1.21.4-bullseye as build

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -trimpath -ldflags "-w -s" -o app

FROM debian:bullseye-slim as deploy

RUN apt-get update

COPY --from=build /app/app .

CMD ["./app"]

こちらが作成したDockerfileです。

  • FROMについて(マルチステージビルド)
    • as buildの部分でが、Goアプリケーションのビルドに使われる記述 (ビルドステージ)
    • as deployが実際にデプロイされるDocker Imageを作成する部分です (デプロイステージ)

Dockerfileをbuildする

次に作成したDockerfileを元にDocker Imageをbuildします。

$ docker build . -t docker-test-go-image

上記コマンドにて、docker-test-go-imageというDocker Imageが作成されました。

Docker Containerを起動する

$ docker run docker-test-go-image
...

最後に先ほど作成したImageを利用して、Docker Containerを起動します。

まとめ

以上で、Dockerのマルチステージビルドを利用したDockerfileの作成が完了しました。
ここで作ったDockerImageを、AWSのECRやGCPのGCRにコンテナImageを配置し、本番環境でDockerコンテナを起動できます。

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion