diff --git a/Dockerfile b/Dockerfile index 7eb90bb35..723949c3a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,44 @@ +# syntax=docker/dockerfile:1.3 + ARG GO_VERSION=1.17 +ARG GORELEASER_XX_VERSION=1.2.5 -FROM golang:${GO_VERSION}-alpine3.14 AS build +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 /src +FROM base AS build ENV GO111MODULE=auto -ENV DISTRIBUTION_DIR /go/src/github.com/distribution/distribution -ENV BUILDTAGS include_oss include_gcs +ENV CGO_ENABLED=0 +ARG TARGETPLATFORM +ARG PKG="github.com/distribution/distribution/v3" +ARG BUILDTAGS="include_oss include_gcs" +RUN --mount=type=bind,target=/src,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" -ARG GOOS=linux -ARG GOARCH=amd64 -ARG GOARM=6 -ARG VERSION -ARG REVISION +FROM scratch AS artifacts +COPY --from=build /out/*.tar.gz / +COPY --from=build /out/*.zip / -RUN set -ex \ - && apk add --no-cache make git file - -WORKDIR $DISTRIBUTION_DIR -COPY . $DISTRIBUTION_DIR -RUN CGO_ENABLED=0 make PREFIX=/go clean binaries && file ./bin/registry | grep "statically linked" +FROM scratch AS binary +COPY --from=build /usr/local/bin/registry* / FROM alpine:3.14 - -RUN set -ex \ - && apk add --no-cache ca-certificates - +RUN apk add --no-cache ca-certificates COPY cmd/registry/config-dev.yml /etc/docker/registry/config.yml -COPY --from=build /go/src/github.com/distribution/distribution/bin/registry /bin/registry +COPY --from=build /usr/local/bin/registry /bin/registry VOLUME ["/var/lib/registry"] EXPOSE 5000 ENTRYPOINT ["registry"] diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 000000000..10a22b757 --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,54 @@ +group "default" { + targets = ["image-local"] +} + +// Special target: https://github.com/docker/metadata-action#bake-definition +target "docker-metadata-action" { + tags = ["registry:local"] +} + +target "binary" { + target = "binary" + output = ["./bin"] +} + +target "artifact" { + target = "artifacts" + output = ["./bin"] +} + +target "artifact-all" { + inherits = ["artifact"] + platforms = [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm/v5", + "linux/arm/v6", + "linux/arm/v7", + "linux/arm64", + "linux/ppc64le", + "linux/s390x" + ] +} + +target "image" { + inherits = ["docker-metadata-action"] +} + +target "image-local" { + inherits = ["image"] + output = ["type=docker"] +} + +target "image-all" { + inherits = ["image"] + platforms = [ + "linux/amd64", + "linux/arm/v6", + "linux/arm/v7", + "linux/arm64", + "linux/ppc64le", + "linux/s390x" + ] +}