- 1コンテナにつき1プロセス
- Immutable Infrastructureなイメージにする
- 軽量なDockerイメージにする
- yumやaptでパッケージをインストールした後のキャッシュファイルやリポジトリのパッケージリストなどの削除
- Alpine Linuxなど軽量なディストリビューションを利用する
- 実行ユーザをroot以外にする
FROM golang:1.10.1-alpine3.7
EXPOSE 8080
COPY ./main.go ./
RUN go build -o ./go-app ./main.go
USER nobody
ENTRYPOINT["./go-app"]
ビルド時にコンテナ状でコマンドを実行する命令する。
書き換える必要のない部分を定義する。
デフォルトの引数などを定義する。 例えば、ENTRYPOINTに/bin/sleepを指定し、CMDにはsleepする秒数を指定するなど。
# アプリケーションをビルド
FROM golang:1.10.1-alpine3.7 as builder
COPY ./main.go ./
RUN go build -o /go-app ./main.go
# ビルドしたバイナリを内包した実行用コンテナを作成
FROM alpine:3.7
EXPOSE 8080
COPY --from=builder /go-app .
ENTRYPOINT ["./go-app"]