1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go1.11でのDockerの設定

Last updated at Posted at 2019-02-05

golangも気づけばv1.11.5になっていまして、昔使ってたDockerfileのままでは動かなくなってるものなどがありました。
なので備忘録としてDockerfileの設定を載せておきます。
もし、こんなやり方があるよというのがあれば是非コメントしていただきたいです。

本番用

以下のような感じになります。

Dockerfile
FROM golang:1.11 AS builder

ENV CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GO111MODULE=on

COPY go.mod go.sum /
RUN go mod download

WORKDIR /go/src/github.com/path/to/project
COPY . .

RUN go build -o app


FROM alpine

COPY --from=builder /go/src/github.com/path/to/project/app /app

EXPOSE 8080
ENTRYPOINT ["/app"]

multi stage buildをしています。
これによって最終的なイメージサイズがかなり小さくなります。

重要な部分は

ENV GO111MODULE=on

COPY go.mod go.sum /
RUN go mod download

上の部分です。先にgo mod downloadをすることでキャッシュが効かせられるので、新しい必要なライブラリが無ければgoファイルの変更後のビルドの時間を短縮することが出来ます。

COPY go.mod go.sum /をするためには予めローカルでgo.modとgo.sumを作っておく必要があります。

bash
$ go version
go version 1.11.5
$ export GO111MODULE=on
$ go mod init
$ go mod download

go.mod go.sumが作成されると思います。

開発環境用

一応開発環境用の設定も載せておきます。

Dockerfile
FROM golang:1.11

ENV GO111MODULE on

COPY go.mod go.sum /

RUN go mod download && \
    go get github.com/oxequa/realize

WORKDIR /go/src/github.com/path/to/project
COPY . .

CMD realize start --run

開発時にはoxequa/realizeを使ってます。
realizeはGoのファイルの変更を感知して、リロードしてくれるライブラリです。Dockerでやるにはvolumeをするのを忘れないでください。

bash
$ docker run -v $PWD:/go/src/github.com/path/to/project image名

ちなみにpilu/freshというライブラリもあります。
その場合は、上のDockerfileの該当箇所を合わせて直してください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?