夢のかけら

Goエンジニアの技術ブログ

【Docker】Go 1.17 + Air で環境構築

f:id:lampler:20211029081643p:plain

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.3COPY . .の前に書くのが良い。

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