This repository has been archived by the owner on Nov 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathDockerfile
71 lines (50 loc) · 2.01 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
############################
# First stage: client asset builder
# Dubnium is the NodeJS codename for current LTS (10.x) release
FROM docker.io/node:dubnium as client-builder
WORKDIR /ui/client
# Copy the package.json and Makefile first so node_modules don't have to change after source-files change
COPY client/package*.json ./
ENV CI=true
# As long as package*.json don't change, then this step will be cached
# Note that this step is done first and separately from the clientAssets below
RUN npm install --only=prod
# Copy the client source code
COPY client ./
RUN npm run build:prod
############################
# Second stage: build the executable with embedded client assets
FROM docker.io/golang:1.14 AS go-builder
# Set the environment variables for the go command
ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOSUMDB=off GO111MODULE=on
WORKDIR /ui
# Copy Go module info and vendored dependencies first
# they are less susceptible to change on every build
# and will therefore be cached for speeding up the next build
COPY ./go.mod ./go.sum ./
# Import the code from the context.
COPY api ./api
COPY controllers ./controllers
COPY internal ./internal
COPY cmd ./cmd
# Put these right before the go build since they will change with each commit,
# which reduces docker caching
ARG VERSION=dev
RUN go build \
-ldflags "-s -w -X github.com/criticalstack/ui/internal/app.Version=$VERSION" \
-o ./bin/ui ./cmd/ui
############################
# Final stage: Just the executable and bare minimum other files
FROM scratch AS final
LABEL MAINTAINER="Critical Stack <[email protected]>"
# Import the Certificate-Authority certificates for enabling HTTPS.
COPY --from=go-builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
# Perform any further action as an unprivileged user.
USER 65534:65534
# ui runs on port 8000
EXPOSE 8000
# Built client/frontend assets
COPY --from=client-builder --chown=65534:65534 /ui/client/build /client/build
# Add ui bin
COPY --from=go-builder --chown=65534:65534 /ui/bin/ui /
ENTRYPOINT ["/ui"]