【Docker】Go 1.17 + Air で環境構築
Dockerfileを書く
FROM golang:1.17-alpine RUN mkdir /go/src/app WORKDIR /go/src/app RUN go install github.com/cosmtrek/air@v1.27.3 COPY . . EXPOSE 8080 CMD "sh" "-c" "go mod tidy && air -c .air.toml"
キャッシュを使ってビルドを高速化するために、RUN go install github.com/cosmtrek/air@v1.27.3
は COPY . .
の前に書くのが良い。
COPY 命令を処理するにあたり、 <コピー元> の内容が変更されている場合は、その Dockerfile の対象行以降でキャッシュを無効にします。
つまりソースコードが変更されるたびに COPY . .
以下の go mod tidy
が実行されるのだ。go install air
はソースコードが変わっても毎回実行する意味がない。
だからCOPY
より上に書いて常にキャッシュされるようにしておく。
docker-compose.ymlを書く
version: "3.8" services: go: build: context: . dockerfile: Dockerfile ports: - "8080:8080" tty: true volumes: - .:/go/src/app