notebooks/components/example-notebook-servers/common.mk

115 lines
4.6 KiB
Makefile

#
# This partial Makefile contains common targets for building and pushing docker images.
#
# It expects the following variables to be set:
# - REGISTRY: the container registry to push to
# - TAG: the primary tag to use
# - IMAGE_NAME: name of the image to build
# - BASE_IMAGE: the base image to use
# - BASE_IMAGE_FOLDERS: the folders containing the base images (whitespace separated)
# - ARCH: the buildkit platforms to build for
# - CACHE_IMAGE: an image to use as a registry-type cache
# - CACHE_TAG: the tag to use for the cache image
#
ALSO_TAG_LATEST ?= 0
ALSO_TAG_VERSION ?=
# compute image ref
IMAGE_REF := $(REGISTRY)/$(IMAGE_NAME)
# compute tag args
IMAGE_TAGS := $(TAG)
ifeq ($(ALSO_TAG_LATEST),1)
IMAGE_TAGS += latest
endif
ifneq ($(ALSO_TAG_VERSION),)
IMAGE_TAGS += $(ALSO_TAG_VERSION)
endif
TAG_ARGS := $(foreach tag_val,$(IMAGE_TAGS),--tag "$(IMAGE_REF):$(tag_val)")
TAG_NAMES := $(foreach tag_val,$(IMAGE_TAGS),"$(IMAGE_REF):$(tag_val)")
# compute cache args
CACHE_FROM := type=registry,ref=$(CACHE_IMAGE):$(CACHE_TAG)
CACHE_TO := type=registry,ref=$(CACHE_IMAGE):$(CACHE_TAG),mode=max
# ------------------------------------------------------------------------------
# docker-build
# ------------------------------------------------------------------------------
# build images in this folder
.PHONY: docker-build
docker-build:
@echo "\n\n"
@echo "------------------------------------------------------------------------------"
@echo "Building '$(IMAGE_NAME)' image..."
@echo "------------------------------------------------------------------------------"
@echo ""
docker build --build-arg BASE_IMG=$(BASE_IMAGE) --progress=plain $(TAG_ARGS) -f Dockerfile .
# build base images as well
.PHONY: docker-build-dep
docker-build-dep: $(addprefix docker-build-dep--, $(BASE_IMAGE_FOLDERS)) docker-build
docker-build-dep--%:
$(MAKE) docker-build-dep -C ../$*
# ------------------------------------------------------------------------------
# docker-push
# ------------------------------------------------------------------------------
# push images in this folder
.PHONY: docker-push
docker-push:
@echo "\n\n"
@echo "------------------------------------------------------------------------------"
@echo "Pushing '$(IMAGE_NAME)' image..."
@echo "------------------------------------------------------------------------------"
@echo ""
docker push $(TAG_NAMES)
# push base images as well
.PHONY: docker-push-dep
docker-push-dep: $(addprefix docker-push-dep--, $(BASE_IMAGE_FOLDERS)) docker-push
docker-push-dep--%:
$(MAKE) docker-push-dep -C ../$*
# ------------------------------------------------------------------------------
# docker-build-multi-arch
# ------------------------------------------------------------------------------
# multi-arch build images in this folder
.PHONY: docker-build-multi-arch
docker-build-multi-arch:
@echo "\n\n"
@echo "------------------------------------------------------------------------------"
@echo "Building '$(IMAGE_NAME)' image for '$(ARCH)'..."
@echo "------------------------------------------------------------------------------"
@echo ""
docker buildx build --load --platform $(ARCH) --build-arg BASE_IMG=$(BASE_IMAGE) --progress=plain --cache-from $(CACHE_FROM) $(TAG_ARGS) -f Dockerfile .
# multi-arch build base images as well
.PHONY: docker-build-multi-arch-dep
docker-build-multi-arch-dep: $(addprefix docker-build-multi-arch-dep--, $(BASE_IMAGE_FOLDERS)) docker-build-multi-arch
docker-build-multi-arch-dep--%:
$(MAKE) docker-build-multi-arch-dep -C ../$*
# ------------------------------------------------------------------------------
# docker-build-push-multi-arch
# ------------------------------------------------------------------------------
# multi-arch build AND push images in this folder
.PHONY: docker-build-push-multi-arch
docker-build-push-multi-arch:
@echo "\n\n"
@echo "------------------------------------------------------------------------------"
@echo "Building AND Pushing '$(IMAGE_NAME)' image for '$(ARCH)'..."
@echo "------------------------------------------------------------------------------"
@echo ""
docker buildx build --push --platform $(ARCH) --build-arg BASE_IMG=$(BASE_IMAGE) --progress=plain --cache-from $(CACHE_FROM) --cache-to $(CACHE_TO) $(TAG_ARGS) -f Dockerfile .
# multi-arch build AND push base images as well
.PHONY: docker-build-push-multi-arch-dep
docker-build-push-multi-arch-dep: $(addprefix docker-build-push-multi-arch-dep--, $(BASE_IMAGE_FOLDERS)) docker-build-push-multi-arch
docker-build-push-multi-arch-dep--%:
$(MAKE) docker-build-push-multi-arch-dep -C ../$*