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
のビルドステージでビルドしたものを WORKDIR
の app
ディレクトリにコピーします。
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
を参考にすれば作業の効率化ができそうです。
コメント