error-pages/Dockerfile

79 lines
2.4 KiB
Docker
Raw Normal View History

2021-09-29 15:38:50 +00:00
# syntax=docker/dockerfile:1.2
2020-07-08 11:12:21 +00:00
2021-09-29 15:38:50 +00:00
# Image page: <https://hub.docker.com/_/golang>
FROM golang:1.18.0-alpine as builder
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 github.com/tarampampam/error-pages/internal/version.version=$APP_VERSION"
RUN set -x \
&& go version \
&& CGO_ENABLED=0 go build -trimpath -ldflags "$LDFLAGS" -o ./error-pages ./cmd/error-pages/ \
&& ./error-pages version \
&& ./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 \
&& ./../bin/error-pages --config-file ./error-pages.yml build ./html --verbose --index \
&& ls -l ./html
# use empty filesystem
FROM scratch as runtime
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
2021-04-13 16:51:23 +00:00
COPY --from=builder /tmp/rootfs /
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"
2021-09-29 15:38:50 +00:00
# Docs: <https://docs.docker.com/engine/reference/builder/#healthcheck>
HEALTHCHECK --interval=7s --timeout=2s CMD ["/bin/error-pages", "healthcheck", "--log-json"]
2021-09-29 15:38:50 +00:00
ENTRYPOINT ["/bin/error-pages"]
CMD ["serve", "--log-json"]