Update Dockerfile to benefit build cache
authorThibault Jamet <tjamet@users.noreply.github.com>
Thu, 7 Sep 2017 13:08:56 +0000 (15:08 +0200)
committerAnthony Fok <foka@debian.org>
Mon, 25 Sep 2017 16:28:13 +0000 (10:28 -0600)
Docker has recently introduces buikld-stages (as of version 17.05)

Build stages allows to benefit the docker build cache as well as
reducing the size of the resulting image c.f.
https://docs.docker.com/engine/userguide/eng-image/multistage-build/

This change allows to have faster builds when running `docker build`
several times after changing some little code

Signed-off-by: Thibault Jamet <tjamet@users.noreply.github.com>
Dockerfile

index f8ec73a8671c0a43df27cc5364ea7ad931b01cb6..ca165a986b934e333b815cefb76055aa9de7ce00 100644 (file)
@@ -1,30 +1,18 @@
-FROM alpine:3.6
+FROM golang:1.9.0-alpine3.6 AS build
 
-ENV GOPATH /go
-ENV PATH $GOPATH/bin:$PATH
+RUN apk add --no-cache --virtual git musl-dev
+RUN go get github.com/kardianos/govendor
+RUN govendor get github.com/gohugoio/hugo
+WORKDIR /go/src/github.com/gohugoio/hugo
+RUN rm -f $GOPATH/bin/hugo
+RUN go install -ldflags '-s -w'
 
+FROM alpine:3.6
 RUN \
   adduser -h /site -s /sbin/nologin -u 1000 -D hugo && \
   apk add --no-cache \
-    dumb-init && \
-  apk add --no-cache --virtual .build-deps \
-    gcc \
-    musl-dev \
-    go \
-    git && \
-  mkdir -p \
-    ${GOPATH}/bin \
-    ${GOPATH}/pkg \
-    ${GOPATH}/src && \
-  go get github.com/kardianos/govendor && \
-  govendor get github.com/gohugoio/hugo && \
-  cd $GOPATH/src/github.com/gohugoio/hugo && \
-  rm -f $GOPATH/bin/hugo && \
-  go install -ldflags '-s -w' && \
-  cd $GOPATH && \
-  rm -rf pkg src .cache bin/govendor && \
-  apk del .build-deps
-
+    dumb-init
+COPY --from=build /go/bin/hugo /bin/hugo
 USER    hugo
 WORKDIR /site
 VOLUME  /site