Dockerfile: Switch to mage builds, various optimizations

- Use Alpine for both stages for consistency.
- Switch to mage from go install as dictated in the latest docs.
- Easy switch to building Hugo Extended by directly setting HUGO_BUILD_TAGS flag at image build time: `docker build --build-arg HUGO_BUILD_TAGS=extended .`
- Update to Go 1.13 and Alpine 3.10.
- The only possibly breaking change: Moved the `hugo` binary in the final stage from /hugo to /usr/bin/hugo so one can simply run `hugo` without having to search around for its location.
This commit is contained in:
Jake Jarvis 2019-10-09 11:27:08 -04:00 committed by Bjørn Erik Pedersen
parent 66fe68ffc9
commit ed2682325a

View file

@ -2,32 +2,44 @@
# Twitter: https://twitter.com/gohugoio # Twitter: https://twitter.com/gohugoio
# Website: https://gohugo.io/ # Website: https://gohugo.io/
FROM golang:1.11-stretch AS build FROM golang:1.13-alpine AS build
# Optionally set HUGO_BUILD_TAGS to "extended" when building like so:
# docker build --build-arg HUGO_BUILD_TAGS=extended .
ARG HUGO_BUILD_TAGS
WORKDIR /go/src/github.com/gohugoio/hugo ARG CGO=1
RUN apt-get install \
git gcc g++ binutils
COPY . /go/src/github.com/gohugoio/hugo/
ENV GO111MODULE=on
RUN go get -d .
ARG CGO=0
ENV CGO_ENABLED=${CGO} ENV CGO_ENABLED=${CGO}
ENV GOOS=linux ENV GOOS=linux
ENV GO111MODULE=on
# default non-existent build tag so -tags always has an arg WORKDIR /go/src/github.com/gohugoio/hugo
ARG BUILD_TAGS="99notag"
RUN go install -ldflags '-w -extldflags "-static"' -tags ${BUILD_TAGS} COPY . /go/src/github.com/gohugoio/hugo/
# gcc/g++ are required to build SASS libraries for extended version
RUN apk update && \
apk add --no-cache gcc g++ musl-dev && \
go get github.com/magefile/mage
RUN mage hugo && mage install
# --- # ---
FROM alpine:3.9 FROM alpine:3.10
RUN apk add --no-cache ca-certificates
COPY --from=build /go/bin/hugo /hugo COPY --from=build /go/bin/hugo /usr/bin/hugo
ARG WORKDIR="/site"
WORKDIR ${WORKDIR} # libc6-compat & libstdc++ are required for extended SASS libraries
VOLUME ${WORKDIR} # ca-certificates are required to fetch outside resources (like Twitter oEmbeds)
RUN apk update && \
apk add --no-cache ca-certificates libc6-compat libstdc++
VOLUME /site
WORKDIR /site
# Expose port for live server
EXPOSE 1313 EXPOSE 1313
ENTRYPOINT [ "/hugo" ]
CMD [ "--help" ] ENTRYPOINT ["hugo"]
CMD ["--help"]