プログラミング

[golang][Echo]Dockerfileの作り方

プログラミング
この記事は約3分で読めます。
スポンサーリンク

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を参考にすれば作業の効率化ができそうです。

スポンサーリンク
スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました