error-pages/Dockerfile

90 lines
2.5 KiB
Docker
Raw Normal View History

# syntax=docker/dockerfile:1
2020-07-08 11:12:21 +00:00
# this stage is used to build the application
FROM golang:1.21-bullseye AS builder
COPY ./go.* /src/
WORKDIR /src
# burn the modules cache
RUN go mod download
# this stage is used to compile the application
FROM builder AS compiler
2021-04-13 13:55:03 +00:00
2021-09-29 15:38:50 +00:00
# can be passed with any prefix (like `v1.2.3@GITHASH`), e.g.: `docker build --build-arg "APP_VERSION=v1.2.3@GITHASH" .`
ARG APP_VERSION="undefined@docker"
2020-07-08 11:12:21 +00:00
2021-04-13 13:55:03 +00:00
WORKDIR /src
2020-07-08 11:12:21 +00:00
2021-09-29 15:38:50 +00:00
COPY . .
# arguments to pass on each go tool link invocation
ENV LDFLAGS="-s -w -X gh.tarampamp.am/error-pages/internal/version.version=$APP_VERSION"
2021-09-29 15:38:50 +00:00
# build the application
2021-09-29 15:38:50 +00:00
RUN set -x \
&& CGO_ENABLED=0 go build -trimpath -ldflags "$LDFLAGS" -o ./error-pages ./cmd/error-pages/ \
2023-01-29 10:54:56 +00:00
&& ./error-pages --version \
2021-09-29 15:38:50 +00:00
&& ./error-pages -h
2021-04-13 13:55:03 +00:00
WORKDIR /tmp/rootfs
2021-09-29 15:38:50 +00:00
# prepare rootfs for runtime
2020-07-08 11:12:21 +00:00
RUN set -x \
2021-04-13 13:55:03 +00:00
&& mkdir -p \
2021-09-29 15:38:50 +00:00
./etc \
./bin \
./opt/html \
&& echo 'appuser:x:10001:10001::/nonexistent:/sbin/nologin' > ./etc/passwd \
&& echo 'appuser:x:10001:' > ./etc/group \
&& mv /src/error-pages ./bin/error-pages \
&& mv /src/templates ./opt/templates \
&& rm ./opt/templates/*.md \
2021-09-29 15:38:50 +00:00
&& mv /src/error-pages.yml ./opt/error-pages.yml
WORKDIR /tmp/rootfs/opt
# generate static error pages (for usage inside another docker images, for example)
RUN set -x \
2023-01-29 10:54:56 +00:00
&& ./../bin/error-pages --verbose build --config-file ./error-pages.yml --index ./html \
2021-09-29 15:38:50 +00:00
&& ls -l ./html
# use empty filesystem
FROM scratch AS runtime
2021-09-29 15:38:50 +00:00
ARG APP_VERSION="undefined@docker"
2020-07-08 11:12:21 +00:00
2021-04-13 13:55:03 +00:00
LABEL \
# Docs: <https://github.com/opencontainers/image-spec/blob/master/annotations.md>
org.opencontainers.image.title="error-pages" \
2021-09-29 15:38:50 +00:00
org.opencontainers.image.description="Static server error pages in the docker image" \
2021-04-13 13:55:03 +00:00
org.opencontainers.image.url="https://github.com/tarampampam/error-pages" \
org.opencontainers.image.source="https://github.com/tarampampam/error-pages" \
org.opencontainers.image.vendor="tarampampam" \
2021-09-29 15:38:50 +00:00
org.opencontainers.version="$APP_VERSION" \
2021-04-13 13:55:03 +00:00
org.opencontainers.image.licenses="MIT"
2020-07-08 11:12:21 +00:00
2021-04-13 13:55:03 +00:00
# Import from builder
COPY --from=compiler /tmp/rootfs /
2021-04-13 16:51:23 +00:00
2021-09-29 15:38:50 +00:00
# Use an unprivileged user
USER 10001:10001
2021-09-29 15:38:50 +00:00
WORKDIR /opt
ENV LISTEN_PORT="8080" \
2021-10-06 17:38:00 +00:00
TEMPLATE_NAME="ghost" \
DEFAULT_ERROR_PAGE="404" \
DEFAULT_HTTP_CODE="404" \
SHOW_DETAILS="false" \
DISABLE_L10N="false"
2021-09-29 15:38:50 +00:00
# Docs: <https://docs.docker.com/engine/reference/builder/#healthcheck>
2023-01-29 10:54:56 +00:00
HEALTHCHECK --interval=7s --timeout=2s CMD ["/bin/error-pages", "--log-json", "healthcheck"]
2021-09-29 15:38:50 +00:00
ENTRYPOINT ["/bin/error-pages"]
2023-01-29 10:54:56 +00:00
CMD ["--log-json", "serve"]