@@ -227,10 +227,9 @@ undeploy: $(KUSTOMIZE) ## Undeploy controller from the K8s cluster specified in
227227# Using a flag file here as docker build doesn't produce a target file.
228228DOCKER_BUILD_INPUTS =$(MANAGER_BIN_INPUTS ) Dockerfile
229229.PHONY : docker-build
230- docker-build : generate-deepcopy generate-conversion .dockerflag.mk # # Build docker image containing the controller manager.
231- .dockerflag.mk : $(DOCKER_BUILD_INPUTS )
232- docker buildx build --load --platform linux/${ARCH} ${BUILD_ARGS} --build-arg ARCH=$(ARCH ) -t ${IMG} .
233- @touch .dockerflag.mk
230+ docker-build : generate-deepcopy generate-conversion # # Build docker image containing the controller manager.
231+ docker buildx build --load --platform linux/${ARCH} ${BUILD_ARGS} --build-arg ARCH=$(ARCH ) . -t $(CONTROLLER_IMG ) -$(ARCH ) :$(TAG )
232+ @echo $(CONTROLLER_IMG ) -$(ARCH ) :$(TAG )
234233
235234.PHONY : docker-build-all # # Build all the architecture docker images
236235docker-build-all : $(addprefix docker-build-,$(ALL_ARCH ) )
@@ -244,11 +243,25 @@ docker-push: .dockerflag.mk ## Push docker image with the manager.
244243
245244.PHONY : docker-push-all # # Push all the architecture docker images
246245docker-push-all : $(addprefix docker-push-,$(ALL_ARCH ) )
247- $(MAKE ) docker-push
246+ $(MAKE ) docker-push-core-manifest
248247
249248docker-push-% :
250249 $(MAKE ) ARCH=$* docker-push
251250
251+ .PHONY : docker-push-core-manifest
252+ docker-push-core-manifest : # # Push the fat manifest docker image.
253+ # # Minimum docker version 18.06.0 is required for creating and pushing manifest images.
254+ $(MAKE ) docker-push-manifest CONTROLLER_IMAGE=$(CONTROLLER_IMG ) MANIFEST_FILE=$(MANIFEST_FILE )
255+
256+ .PHONY : docker-push-manifest
257+ docker-push-manifest : # # Push the manifest image
258+ @# Extract the actual image digests from the architecture-specific manifest lists
259+ @amd64_digest=$$(docker buildx imagetools inspect ${CONTROLLER_IMAGE}-amd64:${TAG} --format "{{json .}}" | jq -r '.manifest.manifests[] | select(.platform.architecture=="amd64" ) | .digest' ); \
260+ arm64_digest=$$(docker buildx imagetools inspect ${CONTROLLER_IMAGE}-arm64:${TAG} --format "{{json .}}" | jq -r '.manifest.manifests[] | select(.platform.architecture=="arm64" ) | .digest' ); \
261+ docker buildx imagetools create -t ${CONTROLLER_IMAGE} :${TAG} \
262+ ${CONTROLLER_IMAGE} -amd64@$$ amd64_digest \
263+ ${CONTROLLER_IMAGE} -arm64@$$ arm64_digest
264+
252265# #@ Tilt
253266# # --------------------------------------
254267# # Tilt Development
0 commit comments