image.mk 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # ==============================================================================
  2. # Makefile helper functions for docker image
  3. #
  4. DOCKER :=docker
  5. DOCKER_SUPPORTED_API_VERSION ?=1.32
  6. REGISTRY_PREFIX ?= docker.hgpark.cn/yfhub
  7. BASE_IMAGE = centos:centos8
  8. EXTRA_ARGS ?= --no-cache
  9. _DOCKER_BUILD_EXTRA_ARGS :=
  10. # 镜像版本
  11. TAG :=3.0
  12. # 镜像私有仓库
  13. REGISTRY :=harbor.sxidc.com/yfhub
  14. # 镜像名称
  15. NAME :=pcm
  16. # 私有仓库镜像名称 必须是这种格式
  17. IMAGE_NAME :=$(REGISTRY)/$(NAME)
  18. ifdef HTTP_PROXY
  19. _DOCKER_BUILD_EXTRA_ARGS += --build-arg HTTP_PROXY=${HTTP_PROXY}
  20. endif
  21. ifneq ($(EXTRA_ARGS), )
  22. _DOCKER_BUILD_EXTRA_ARGS += $(EXTRA_ARGS)
  23. endif
  24. IMAGES_DIR ?= $(wildcard ${ROOT_DIR}/build/docker/*)
  25. IMAGES ?= $(filter-out tools,$(foreach image,${IMAGES_DIR},$(notdir ${image})))
  26. ifeq (${IMAGES},)
  27. $(error Could not determine IMAGES, set ROOT_DIR or run in source dir)
  28. endif
  29. .PHONY: image.verify
  30. image.verify:
  31. $(eval API_VERSION := $(shell $(DOCKER) version | grep -E 'API version: {1,6}[0-9]' | head -n1 | awk '{print $$3} END { if (NR==0) print 0}' ))
  32. $(eval PASS := $(shell echo "$(API_VERSION) > $(DOCKER_SUPPORTED_API_VERSION)" | bc))
  33. @if [ $(PASS) -ne 1 ]; then \
  34. $(DOCKER) -v ;\
  35. echo "Unsupported docker version. Docker API version should be greater than $(DOCKER_SUPPORTED_API_VERSION)"; \
  36. exit 1; \
  37. fi
  38. .PHONY: image.daemon.verify
  39. image.daemon.verify:
  40. $(eval PASS := $(shell $(DOCKER) version | grep -q -E 'Experimental: {1,5}true' && echo 1 || echo 0))
  41. @if [ $(PASS) -ne 1 ]; then \
  42. echo "Experimental features of Docker daemon is not enabled. Please add \"experimental\": true in '/etc/docker/daemon.json' and then restart Docker daemon."; \
  43. exit 1; \
  44. fi
  45. .PHONY: image.build
  46. image.build: go.build.multiarch image.verify image.daemon.verify image.build.shell
  47. .PHONY: image.build.shell # 这里写的比较糙。没有使用变量
  48. image.build.shell:
  49. @cp $(OUTPUT_DIR)/platforms/linux/amd64/* $(ROOT_DIR)/build/docker/pcm
  50. docker build -t $(IMAGE_NAME) $(ROOT_DIR)/build/docker/pcm
  51. docker tag $(IMAGE_NAME) $(IMAGE_NAME):$(TAG)
  52. docker push $(IMAGE_NAME):$(TAG)
  53. @ rm -rf $(ROOT_DIR)/build/docker/pcm/pcm-server