# syntax=docker/dockerfile:1.7 ARG VERSION=v1.4.0 ARG MINIMUM_UPDATE_VERSION=v1.4.0 ARG MINIMUM_AGENT_PROTOCOL=2 ARG RUNTIME_CONTRACT_VERSION=2 ARG DATABASE_CONTRACT_VERSION=1 ARG SCHEMA_VERSION=11 FROM golang:1.25.13-alpine AS build ARG VERSION RUN apk add --no-cache build-base WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=1 GOOS=linux go build -trimpath -ldflags="-s -w -X github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/buildinfo.Version=${VERSION}" -o /out/domain-control ./cmd/dyndns-web FROM alpine:3.23.2 AS runtime ARG VERSION ARG MINIMUM_UPDATE_VERSION ARG MINIMUM_AGENT_PROTOCOL ARG RUNTIME_CONTRACT_VERSION ARG DATABASE_CONTRACT_VERSION ARG SCHEMA_VERSION RUN apk add --no-cache ca-certificates && \ addgroup -S -g 10001 dyndns && \ adduser -S -D -H -u 10001 -G dyndns dyndns && \ mkdir -p /data /secrets && chown dyndns:dyndns /data /secrets COPY --from=build /out/domain-control /usr/local/bin/domain-control RUN ln -s domain-control /usr/local/bin/update-agent LABEL org.opencontainers.image.version="${VERSION}" \ de.j-mahler.domain-control.minimum-update-version="${MINIMUM_UPDATE_VERSION}" \ de.j-mahler.domain-control.minimum-agent-protocol="${MINIMUM_AGENT_PROTOCOL}" \ de.j-mahler.domain-control.runtime-contract="${RUNTIME_CONTRACT_VERSION}" \ de.j-mahler.domain-control.database-contract="${DATABASE_CONTRACT_VERSION}" \ de.j-mahler.domain-control.schema-version="${SCHEMA_VERSION}" USER dyndns:dyndns WORKDIR /data EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 CMD ["/usr/local/bin/domain-control", "healthcheck"] ENTRYPOINT ["/usr/local/bin/domain-control"] CMD ["serve"]