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"]