https://github.com/cilium/cilium
Raw File
Tip revision: b5eb6622da121ad36b8f375a084392f7feeec64a authored by Paul Chaignon on 03 February 2021, 13:46:15 UTC
Merge fe4adcc93f20d270459165a9fdd147fc1632c77b into e567f8bfa7e8cc4d71566f224f60d7222d3d874b
Tip revision: b5eb662
Makefile.docker
# Copyright 2017-2020 Authors of Cilium
# SPDX-License-Identifier: Apache-2.0

UTC_DATE=$(shell date -u "+%Y-%m-%d")
DOCKER_REGISTRY ?= quay.io
ifeq ($(findstring /,$(DOCKER_DEV_ACCOUNT)),/)
    # DOCKER_DEV_ACCOUNT already contains '/', assume it specifies a registry
    IMAGE_REPOSITORY := $(DOCKER_DEV_ACCOUNT)
else
    IMAGE_REPOSITORY := $(DOCKER_REGISTRY)/$(DOCKER_DEV_ACCOUNT)
endif

#
# Template for Docker images. Paramaters are:
# $(1) image target name
# $(2) Dockerfile name
# $(3) image name stem (e.g., cilium, cilium-operator, etc)
# $(4) image tag
# $(5) manifest target name
#
define DOCKER_IMAGE_TEMPLATE
.PHONY: $(1)
$(1): GIT_VERSION $(BUILD_DIR)/$(2) build-context-update builder-info
	$(eval IMAGE_NAME := $(subst %,$$$$*,$(3))$(UNSTRIPPED))
	$(QUIET)$(CONTAINER_ENGINE) build -f $(BUILD_DIR)/$(subst %,$$*,$(2)) \
		$(DOCKER_FLAGS) \
		--build-arg NOSTRIP=${NOSTRIP} \
		--build-arg LOCKDEBUG=${LOCKDEBUG} \
		--build-arg RACE=${RACE}\
		--build-arg V=${V} \
		--build-arg LIBNETWORK_PLUGIN=${LIBNETWORK_PLUGIN} \
		--build-arg CILIUM_SHA=$(firstword $(GIT_VERSION)) \
		-t $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4) $(DOCKER_BUILD_DIR)
ifneq ($(DOCKER_BUILDER),default)
  ifeq ($(findstring --push,$(DOCKER_FLAGS)),)
	@echo 'Define "DOCKER_FLAGS=--push" to push the build results.'
  else
	docker buildx imagetools inspect $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4)
	@echo '^^^ Images pushed, multi-arch manifest should be above. ^^^'
  endif
else
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4) $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4)-${GOARCH}
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4) cilium/$(IMAGE_NAME):$(4)
	@echo "Push like this when ready:"
	@echo "${CONTAINER_ENGINE} push $(IMAGE_REPOSITORY)/$(IMAGE_NAME):$(4)-${GOARCH}"

.PHONY: $(5)
$(5): $(BUILD_DIR)/$(2)
	@$(ECHO_CHECK) contrib/scripts/push_manifest.sh $(IMAGE_NAME) $(4)
	$(QUIET) contrib/scripts/push_manifest.sh $(IMAGE_NAME) $(4)
endif

$(1)-unstripped: NOSTRIP=1
$(1)-unstripped: UNSTRIPPED=-unstripped
$(1)-unstripped: docker-cilium-image
endef

# docker-cilium-image
$(eval $(call DOCKER_IMAGE_TEMPLATE,docker-cilium-image,Dockerfile,cilium,$(DOCKER_IMAGE_TAG),docker-cilium-manifest))

# dev-docker-image
$(eval $(call DOCKER_IMAGE_TEMPLATE,dev-docker-image,Dockerfile,cilium-dev,$(DOCKER_IMAGE_TAG),docker-cilium-dev-manifest))

# docker-plugin-image
$(eval $(call DOCKER_IMAGE_TEMPLATE,docker-plugin-image,cilium-docker-plugin.Dockerfile,docker-plugin,$(DOCKER_IMAGE_TAG),docker-plugin-manifest))

# docker-hubble-relay-image
$(eval $(call DOCKER_IMAGE_TEMPLATE,docker-hubble-relay-image,hubble-relay.Dockerfile,hubble-relay,$(DOCKER_IMAGE_TAG),docker-hubble-relay-manifest))

# docker-clustermesh-apiserver-image
$(eval $(call DOCKER_IMAGE_TEMPLATE,docker-clustermesh-apiserver-image,clustermesh-apiserver.Dockerfile,clustermesh-apiserver,$(DOCKER_IMAGE_TAG),docker-clustermesh-apiserver-manifest))

# docker-operator-images.
# We eat the ending of "operator" in to the stem ('%') to allow this pattern
# to build also 'docker-operator-image', where the stem would be empty otherwise.
$(eval $(call DOCKER_IMAGE_TEMPLATE,docker-opera%-image,cilium-opera%.Dockerfile,opera%,$(DOCKER_IMAGE_TAG),docker-opera%-manifest))
$(eval $(call DOCKER_IMAGE_TEMPLATE,dev-docker-opera%-image,cilium-opera%.Dockerfile,cilium-opera%,$(DOCKER_IMAGE_TAG),dev-docker-opera%-manifest))

#
# docker-*-all targets are mainly used from the CI
#
docker-images-all: docker-cilium-image docker-plugin-image docker-hubble-relay-image docker-clustermesh-apiserver-image docker-operator-images-all

docker-images-all-unstripped: docker-cilium-image-unstripped docker-plugin-image-unstripped docker-hubble-relay-image-unstripped docker-clustermesh-apiserver-image-unstripped docker-operator-images-all-unstripped

docker-operator-images-all: docker-operator-image docker-operator-aws-image docker-operator-azure-image docker-operator-generic-image

docker-operator-images-all-unstripped: docker-operator-image-unstripped docker-operator-aws-image-unstripped docker-operator-azure-image-unstripped docker-operator-generic-image-unstripped


docker-image-runtime: builder-info
	cd contrib/packaging/docker && $(CONTAINER_ENGINE) build $(DOCKER_FLAGS) -t $(IMAGE_REPOSITORY)/cilium-runtime:$(UTC_DATE) -f Dockerfile.runtime .

ifeq ($(DOCKER_BUILDER),default)
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/cilium-runtime:$(UTC_DATE) $(IMAGE_REPOSITORY)/cilium-runtime:$(UTC_DATE)-${GOARCH}
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/cilium-runtime:$(UTC_DATE) cilium/cilium-runtime:$(UTC_DATE)

docker-cilium-runtime-manifest:
	@$(ECHO_CHECK) contrib/scripts/push_manifest.sh cilium-runtime $(UTC_DATE)
	$(QUIET) contrib/scripts/push_manifest.sh cilium-runtime $(UTC_DATE)
endif


docker-image-builder: builder-info
	$(QUIET)$(CONTAINER_ENGINE) build $(DOCKER_FLAGS) -t $(IMAGE_REPOSITORY)/cilium-builder:$(UTC_DATE) -f Dockerfile.builder .

ifeq ($(DOCKER_BUILDER),default)
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/cilium-builder:$(UTC_DATE) $(IMAGE_REPOSITORY)/cilium-builder:$(UTC_DATE)-${GOARCH}
	$(QUIET)$(CONTAINER_ENGINE) tag $(IMAGE_REPOSITORY)/cilium-builder:$(UTC_DATE) cilium/cilium-builder:$(UTC_DATE)

docker-cilium-builder-manifest:
	@$(ECHO_CHECK) contrib/scripts/push_manifest.sh cilium-builder $(UTC_DATE)
	$(QUIET) contrib/scripts/push_manifest.sh cilium-builder $(UTC_DATE)
endif

.PHONY: docker-image-runtime docker-image-builder cilium-runtime-manifest docker-cilium-builder-manifest
back to top