github.com/PDOK/gokoala@v0.50.6/Dockerfile (about) 1 ####### Node.js build 2 FROM docker.io/node:lts-alpine3.17 AS build-component 3 RUN mkdir -p /usr/src/app 4 COPY ./viewer /usr/src/app 5 WORKDIR /usr/src/app 6 RUN npm install 7 RUN npm run build 8 9 ####### Go build 10 FROM docker.io/golang:1.22-bookworm AS build-env 11 WORKDIR /go/src/service 12 ADD . /go/src/service 13 14 # enable cgo in order to interface with sqlite 15 ENV CGO_ENABLED=1 16 ENV GOOS=linux 17 18 # install sqlite-related compile-time dependencies 19 RUN set -eux && \ 20 apt-get update && \ 21 apt-get install -y libcurl4-openssl-dev libssl-dev libsqlite3-mod-spatialite && \ 22 rm -rf /var/lib/apt/lists/* 23 24 # install controller-gen (used by go generate) 25 RUN hack/build-controller-gen.sh 26 27 # build & test the binary with debug information removed. 28 RUN go mod download all && \ 29 go generate -v ./... && \ 30 go test -short ./... && \ 31 go build -v -ldflags '-w -s' -a -installsuffix cgo -o /gokoala github.com/PDOK/gokoala/cmd 32 33 # delete all go files (and testdata dirs) so only assets/templates/etc remain, since in a later 34 # stage we need to copy these remaining files including their subdirectories to the final docker image. 35 RUN find . -type f -name "*.go" -delete && find . -type d -name "testdata" -prune -exec rm -rf {} \; 36 37 ####### Final image (use debian tag since we rely on C-libs) 38 FROM docker.io/debian:bookworm-slim 39 40 # install sqlite-related runtime dependencies 41 RUN set -eux && \ 42 apt-get update && \ 43 apt-get install -y libcurl4 curl openssl libsqlite3-mod-spatialite && \ 44 rm -rf /var/lib/apt/lists/* 45 46 EXPOSE 8080 47 # use the WORKDIR to create a /tmp folder 48 WORKDIR /tmp 49 WORKDIR / 50 51 # include executable 52 COPY --from=build-env /gokoala / 53 54 # include assets/templates/etc (be specific here to only include required dirs) 55 COPY --from=build-env /go/src/service/assets/ /assets/ 56 COPY --from=build-env /go/src/service/internal/ /internal/ 57 58 # include view-component webcomponent as asset 59 COPY --from=build-component /usr/src/app/dist/view-component/styles.css /assets/view-component/styles.css 60 COPY --from=build-component /usr/src/app/dist/view-component/main.js /assets/view-component/main.js 61 COPY --from=build-component /usr/src/app/dist/view-component/polyfills.js /assets/view-component/polyfills.js 62 COPY --from=build-component /usr/src/app/dist/view-component/runtime.js /assets/view-component/runtime.js 63 COPY --from=build-component /usr/src/app/dist/view-component/3rdpartylicenses.txt /assets/view-component/3rdpartylicenses.txt 64 65 # run as non-root 66 USER 1001 67 ENTRYPOINT ["/gokoala"]