diff --git a/Dockerfile b/Dockerfile index 230b9d6d6..0696587f1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,9 @@ # Build Stage -FROM golang as build +FROM golang:1.20 AS builder + +LABEL org.opencontainers.image.source=https://github.com/OpenIMSDK/Open-IM-Server +LABEL org.opencontainers.image.description="OpenIM Server image" +LABEL org.opencontainers.image.licenses="Apache 2.0" # Set go mod installation source and proxy ARG GO111MODULE=on @@ -24,8 +28,8 @@ RUN apk --no-cache add tzdata VOLUME ["/Open-IM-Server/logs", "/Open-IM-Server/config", "/Open-IM-Server/scripts", "/Open-IM-Server/db/sdk"] # Copy scripts and binary files to the production image -COPY --from=build /Open-IM-Server/scripts /Open-IM-Server/scripts -COPY --from=build /Open-IM-Server/_output/bin/platforms/linux/arm64 /Open-IM-Server/_output/bin/platforms/linux/arm64 +COPY --from=builder /Open-IM-Server/scripts /Open-IM-Server/scripts +COPY --from=builder /Open-IM-Server/_output/bin/platforms/linux/amd64 /Open-IM-Server/_output/bin/platforms/linux/amd64 WORKDIR /Open-IM-Server/scripts diff --git a/scripts/make-rules/image.mk b/scripts/make-rules/image.mk index 326507d83..31448bf24 100644 --- a/scripts/make-rules/image.mk +++ b/scripts/make-rules/image.mk @@ -18,35 +18,25 @@ # ============================================================================== # Path: scripts/make-rules/image.mk # docker registry: registry.example.com/namespace/image:tag as: registry.hub.docker.com/cubxxw/: +# https://docs.docker.com/build/building/multi-platform/ # -# # If you wish built the manager image targeting other platforms you can use the --platform flag. -# # (i.e. docker build --platform linux/arm64 ). However, you must enable docker buildKit for it. -# # More info: https://docs.docker.com/develop/develop-images/build_enhancements/ -# .PHONY: docker-build -# docker-build: test ## Build docker image with the manager. -# docker build -t ${IMG} . - -# .PHONY: docker-push -# docker-push: ## Push docker image with the manager. -# docker push ${IMG} - -# # PLATFORMS defines the target platforms for the manager image be build to provide support to multiple -# # architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: -# # - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ -# # - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ -# # - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=> then the export will fail) -# # To properly provided solutions that supports more than one platform you should use this option. -# PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le -# .PHONY: docker-buildx -# docker-buildx: test ## Build and push docker image for the manager for cross-platform support -# # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile -# sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross -# - docker buildx create --name project-v3-builder -# docker buildx use project-v3-builder -# - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross . -# - docker buildx rm project-v3-builder -# rm Dockerfile.cross +# PLATFORMS defines the target platforms for the manager image be build to provide support to multiple +# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: +# - able to use docker buildx . More info: https://docs.docker.com/build/buildx/ +# - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/ +# - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=> then the export will fail) +# To properly provided solutions that supports more than one platform you should use this option. +PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le +.PHONY: docker-buildx +docker-buildx: test ## Build and push docker image for the manager for cross-platform support + # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile + sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross + - docker buildx create --name project-v3-builder + docker buildx use project-v3-builder + - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross . + - docker buildx rm project-v3-builder + rm Dockerfile.cross DOCKER := docker DOCKER_SUPPORTED_API_VERSION ?= 1.32|1.40|1.41 @@ -98,6 +88,9 @@ image.daemon.verify: exit 1; \ fi +# If you wish built the manager image targeting other platforms you can use the --platform flag. +# (i.e. docker build --platform linux/arm64 ). However, you must enable docker buildKit for it. +# More info: https://docs.docker.com/develop/develop-images/build_enhancements/ ## image.build: Build docker images .PHONY: image.build image.build: image.verify go.build.verify $(addprefix image.build., $(addprefix $(IMAGE_PLAT)., $(IMAGES))) @@ -126,6 +119,8 @@ image.build.%: go.build.% fi @rm -rf $(TMP_DIR)/$(IMAGE) +# https://docs.docker.com/build/building/multi-platform/ +# busybox image supports amd64, arm32v5, arm32v6, arm32v7, arm64v8, i386, ppc64le, and s390x ## image.buildx.%: Build docker images with buildx .PHONY: image.buildx.% image.buildx.%: