From c6407354b5e17d7d329b763a42dc2707c49919bc Mon Sep 17 00:00:00 2001 From: Ramkumar Chinchani <45800463+rchincha@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:12:56 -0700 Subject: [PATCH] build: fix container image targets (#1856) Use stacker to build OCI image. Use podman/docker to build docker image. Signed-off-by: Ramkumar Chinchani --- .github/workflows/nightly.yaml | 12 ++++++++++++ CONTRIBUTING.md | 4 ++-- Makefile | 12 ++++++------ build/Dockerfile-conformance | 14 ++++++++++---- build/Dockerfile-minimal | 16 +++++++++------- build/Dockerfile-zb | 16 +++++++++------- build/Dockerfile-zxp | 16 +++++++++------- 7 files changed, 57 insertions(+), 33 deletions(-) diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index 38c3751d..37ad1aa0 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -152,3 +152,15 @@ jobs: cat /tmp/gc-bench-s3.log exit 1 - uses: ./.github/actions/teardown-localstack + + docker-image: + name: Build docker image (for users still using Docker environments) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/clean-runner + - name: Check out source code + uses: actions/checkout@v4 + - name: Build image + run: | + make docker-image diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb46808c..5e1a14e1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,13 +62,13 @@ make exporter-minimal ## Using container builds (stacker) ``` -make binary-stacker +make oci-image ``` ## Using container builds (docker) ``` -make binary-container +make docker-image ``` # Project Structure diff --git a/Makefile b/Makefile index 01fea1ba..8f190ea5 100644 --- a/Makefile +++ b/Makefile @@ -354,8 +354,8 @@ run-container: ${CONTAINER_RUNTIME} run --rm --security-opt label=disable -v $$(pwd):/go/src/github.com/project-zot/zot \ zot-build:latest -.PHONY: binary-stacker -binary-stacker: $(STACKER) +.PHONY: oci-image +oci-image: $(STACKER) ${STACKER} --debug build \ -f build/stacker.yaml \ --substitute COMMIT=$(COMMIT) \ @@ -364,9 +364,9 @@ binary-stacker: $(STACKER) --substitute RELEASE_TAG=$(RELEASE_TAG) \ --substitute REPO_NAME=zot-$(OS)-$(ARCH) -.PHONY: image -image: - ${CONTAINER_RUNTIME} build ${BUILD_ARGS} -f build/Dockerfile -t zot:latest . +.PHONY: docker-image +docker-image: + ${CONTAINER_RUNTIME} buildx build --platform $(OS)/$(ARCH) -f build/Dockerfile . $(BATS): rm -rf bats-core; \ @@ -438,7 +438,7 @@ fuzz-all: bash test/scripts/fuzzAll.sh ${fuzztime}; \ rm -rf pkg/storage/testdata; \ -$(STACKER): +$(STACKER): check-linux mkdir -p $(TOOLSDIR)/bin; \ curl -fsSL https://github.com/project-stacker/stacker/releases/latest/download/stacker -o $@; \ chmod +x $@ diff --git a/build/Dockerfile-conformance b/build/Dockerfile-conformance index 5378dcbc..329a5880 100644 --- a/build/Dockerfile-conformance +++ b/build/Dockerfile-conformance @@ -1,13 +1,17 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT + RUN apt-get update && apt-get install -y git make ca-certificates RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT clean binary +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean binary RUN echo '# Default config file for zot server\n\ http:\n\ address: 0.0.0.0\n\ @@ -21,9 +25,11 @@ storage:\n\ # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt -COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-linux-amd64 /usr/bin/zot -COPY --from=builder /go/src/github.com/project-zot/zot/config.yaml /etc/zot/config.yaml +COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-$TARGETOS-$TARGETARCH /usr/bin/zot +COPY --from=builder /go/src/github.com/project-zot/zot/config.json /etc/zot/config.json ENTRYPOINT ["/usr/bin/zot"] EXPOSE 5000 VOLUME ["/var/lib/registry"] diff --git a/build/Dockerfile-minimal b/build/Dockerfile-minimal index e9630683..5538f264 100644 --- a/build/Dockerfile-minimal +++ b/build/Dockerfile-minimal @@ -1,14 +1,16 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean binary-minimal +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean binary-minimal RUN echo '{\n\ "storage": {\n\ "rootDirectory": "/var/lib/registry"\n\ @@ -26,10 +28,10 @@ RUN echo '{\n\ # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt -COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-$OS-$ARCH-minimal /usr/bin/zot +COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-$TARGETOS-$TARGETARCH-minimal /usr/bin/zot COPY --from=builder /go/src/github.com/project-zot/zot/config.json /etc/zot/config.json ENTRYPOINT ["/usr/bin/zot"] EXPOSE 5000 diff --git a/build/Dockerfile-zb b/build/Dockerfile-zb index 33b6454f..1e82ebc8 100644 --- a/build/Dockerfile-zb +++ b/build/Dockerfile-zb @@ -1,20 +1,22 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean bench +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean bench # --- # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH -COPY --from=builder /go/src/github.com/project-zot/zot/bin/zb-$OS-$ARCH /usr/bin/zb +ARG TARGETOS +ARG TARGETARCH +COPY --from=builder /go/src/github.com/project-zot/zot/bin/zb-$TARGETOS-$TARGETARCH /usr/bin/zb ENTRYPOINT ["/usr/bin/zb"] diff --git a/build/Dockerfile-zxp b/build/Dockerfile-zxp index d9b2f91f..285387ce 100644 --- a/build/Dockerfile-zxp +++ b/build/Dockerfile-zxp @@ -1,14 +1,16 @@ # --- # Stage 1: Build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean exporter-minimal +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean exporter-minimal RUN echo '{\n\ "Server": {\n\ "protocol": "http",\n\ @@ -27,9 +29,9 @@ RUN echo '{\n\ # Stage 2: Final image with nothing but binary and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH -COPY --from=builder /go/src/github.com/project-zot/zot/bin/zxp-$OS-$ARCH /zxp +ARG TARGETOS +ARG TARGETARCH +COPY --from=builder /go/src/github.com/project-zot/zot/bin/zxp-$TARGETOS-$TARGETARCH /zxp COPY --from=builder /go/src/github.com/project-zot/zot/config.json /etc/zxp/config.json ENTRYPOINT ["/zxp"] EXPOSE 5001