Docker Moby Logo

[Go 言語][Echo]Dockerfile の作り方

Go 言語Web アプリケーションフレームワークである Echo で作成したプロジェクトで Dockerfile を作成してみました。
その時の Dockerfile をメモしておきます。

Dockerfile の中身

FROM golang:latest as builder

COPY . /build/

WORKDIR /build

RUN go mod download

RUN go mod tidy

RUN CGO_ENABLED=0 go build -a -installsuffix cgo --ldflags "-s -w" -o /build/main

FROM alpine:3.15.4

WORKDIR /app

RUN adduser -S -D -H -h /app appuser

USER appuser

COPY --from=builder /build/main /app/

EXPOSE 8080

ENTRYPOINT ./main

やってることとしてはまず、

FROM golang:latest as builder

golang のビルドステージを宣言します。

次に、

COPY . /build/

WORKDIR /build

でカレントディレクトリを build ディレクトリにコピーし、 build ディレクトリを WORKDIR に設定します。
WORKDIR である build ディレクトリに対して下記のコマンドを実行します。

RUN go mod download

RUN go mod tidy

RUN CGO_ENABLED=0 go build -a -installsuffix cgo --ldflags "-s -w" -o /build/main

このプロジェクトで使用するモジュールをインストールし、プロジェクトをビルドしています。
次に Alpine のビルドステージを宣言します。

FROM alpine:3.15.4

app ディレクトリを WORKDIR に設定します。

WORKDIR /app

appuser というユーザを追加し、そのユーザで golang のビルドステージでビルドしたものを WORKDIRapp ディレクトリにコピーします。

RUN adduser -S -D -H -h /app appuser

USER appuser

COPY --from=builder /build/main /app/

8080 」というポートを使用すると宣言します。

EXPOSE 8080

最後にビルドしたファイルを実行します。

ENTRYPOINT ./main

docker build してみる

下記のコマンドを実行して Docker をビルドします。ビルドが成功すると Docker のイメージが作成されます。

$ docker build -t <project-name>:<tag> .

<project-name> 」と「 <tag> 」は適宜置き換えて実行します。「 <tag> 」は省略可能です。
下記のコマンドを実行することで Docker のイメージが作成されたか確認できます。

$ docker images

コンテナを起動する

作成された Docker イメージを使用してコンテナを起動してみます。

$ docker run -p 8080:8080 <project-name>:<tag>

<project-name> 」と「 <tag> 」については先程の「 docker images 」で確認できたリポジトリ名とタグを設定します。
-p オプション」ではポート番号を入力しますが、ここは環境に応じて書き換えます。

最後に

Echo で作成したプロジェクトの Dockerfile のベースができたので、今後はこの Dockerfile を参考にすれば作業の効率化ができそうです。

コメントする

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