59 lines
1.4 KiB
Docker
59 lines
1.4 KiB
Docker
# Load the golang image
|
|
FROM golang:1.20.7 as go-builder
|
|
# Then the node image
|
|
FROM node:20.5.0 as builder
|
|
|
|
# Copy golang into the node image
|
|
COPY --from=go-builder /usr/local/go /usr/local/go
|
|
|
|
# Now our base image is ready.
|
|
|
|
# Continue as normal
|
|
WORKDIR /go/src/app
|
|
|
|
# Set our build environment
|
|
ENV GOPATH=/go
|
|
ENV PATH=$GOPATH/bin:/usr/local/go/bin:$PATH
|
|
ENV GOCACHE=/tmp/.go-build-cache
|
|
ENV CGO_ENABLED=0
|
|
# This variable communicates to the service that it's running inside
|
|
# a docker container.
|
|
ENV ENV_DOCKER=true
|
|
|
|
# Copy dockerignore files
|
|
COPY .dockerignore ./
|
|
|
|
# Install go deps using the cache
|
|
COPY go.mod go.sum Makefile ./
|
|
RUN --mount=type=cache,target=/go/pkg/mod/ \
|
|
go mod download -x
|
|
|
|
# Install node deps
|
|
COPY frontend/package.json frontend/package-lock.json frontend/
|
|
# Set npm cache to /tmp/.npm-cache
|
|
RUN npm config set cache /tmp/.npm-cache --global
|
|
RUN --mount=type=cache,target=/tmp/.npm-cache \
|
|
make install
|
|
|
|
# Build the frontend
|
|
COPY frontend frontend
|
|
RUN make frontend
|
|
|
|
# Build the backend
|
|
COPY . .
|
|
RUN --mount=type=cache,target=/tmp/.go-build-cache \
|
|
make backend
|
|
|
|
# Now create a new image with just the binary
|
|
FROM gcr.io/distroless/static-debian11:nonroot
|
|
|
|
# Set our runtime environment
|
|
ENV ENV_DOCKER=true
|
|
|
|
COPY --from=builder /go/src/app/goshort /usr/local/bin/goshort
|
|
|
|
HEALTHCHECK CMD [ "goshort", "healthcheck" ]
|
|
|
|
ENTRYPOINT [ "goshort" ]
|
|
CMD [ "serve" ]
|