34 lines
1.0 KiB
Docker
34 lines
1.0 KiB
Docker
|
# Use the offical golang image to create a binary.
|
||
|
# This is based on Debian and sets the GOPATH to /go.
|
||
|
# https://hub.docker.com/_/golang
|
||
|
FROM golang:1.16-buster as builder
|
||
|
|
||
|
# Create and change to the app directory.
|
||
|
WORKDIR /app
|
||
|
|
||
|
# Retrieve application dependencies.
|
||
|
# This allows the container build to reuse cached dependencies.
|
||
|
# Expecting to copy go.mod and if present go.sum.
|
||
|
COPY go.* ./
|
||
|
RUN go mod download
|
||
|
|
||
|
# Copy local code to the container image.
|
||
|
COPY . ./
|
||
|
|
||
|
# Build the binary.
|
||
|
RUN go build -v -o server
|
||
|
|
||
|
# Use the official Debian slim image for a lean production container.
|
||
|
# https://hub.docker.com/_/debian
|
||
|
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
|
||
|
FROM debian:buster-slim
|
||
|
RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||
|
ca-certificates && \
|
||
|
rm -rf /var/lib/apt/lists/*
|
||
|
|
||
|
# Copy the binary to the production image from the builder stage.
|
||
|
COPY --from=builder /app/server /app/server
|
||
|
|
||
|
# Run the web service on container startup.
|
||
|
CMD ["/app/server"]
|