# syntax=docker/dockerfile:1.3 ARG GO_VERSION=1.16.15 ARG GORELEASER_XX_VERSION=1.2.5 FROM --platform=$BUILDPLATFORM crazymax/goreleaser-xx:${GORELEASER_XX_VERSION} AS goreleaser-xx FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS base COPY --from=goreleaser-xx / / RUN apk add --no-cache file git WORKDIR /go/src/github.com/docker/distribution FROM base AS build ENV GO111MODULE=auto ENV CGO_ENABLED=0 # GIT_REF is used by goreleaser-xx to handle the proper git ref when available. # It will fallback to the working tree info if empty and use "git tag --points-at" # or "git describe" to define the version info. ARG GIT_REF ARG TARGETPLATFORM ARG PKG="github.com/distribution/distribution" ARG BUILDTAGS="include_oss include_gcs" RUN --mount=type=bind,rw \ --mount=type=cache,target=/root/.cache/go-build \ --mount=target=/go/pkg/mod,type=cache \ goreleaser-xx --debug \ --name="registry" \ --dist="/out" \ --main="./cmd/registry" \ --flags="-v" \ --ldflags="-s -w -X '$PKG/version.Version={{.Version}}' -X '$PKG/version.Revision={{.Commit}}' -X '$PKG/version.Package=$PKG'" \ --tags="$BUILDTAGS" \ --files="LICENSE" \ --files="README.md" FROM scratch AS artifact COPY --from=build /out/*.tar.gz / COPY --from=build /out/*.zip / COPY --from=build /out/*.sha256 / FROM scratch AS binary COPY --from=build /usr/local/bin/registry* / FROM alpine:3.14 RUN apk add --no-cache ca-certificates COPY cmd/registry/config-dev.yml /etc/docker/registry/config.yml COPY --from=build /usr/local/bin/registry /bin/registry VOLUME ["/var/lib/registry"] EXPOSE 5000 ENTRYPOINT ["registry"] CMD ["serve", "/etc/docker/registry/config.yml"]