You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/04/20 08:54:36 UTC

[dubbo-admin] branch refactor-with-go updated: add build and push docker images for cross-platform support (#1089)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch refactor-with-go
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git


The following commit(s) were added to refs/heads/refactor-with-go by this push:
     new 9addd977 add build and push docker images for cross-platform support (#1089)
9addd977 is described below

commit 9addd977cb630dfc6933de1fa752d608b36d8a4c
Author: Jun <10...@users.noreply.github.com>
AuthorDate: Thu Apr 20 16:54:31 2023 +0800

    add build and push docker images for cross-platform support (#1089)
---
 Dockerfile |  9 ++++++++-
 Makefile   | 28 +++++++++++++++++++++++++++-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index cb4ee77a..a05f5d39 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -18,6 +18,8 @@ FROM golang:1.20.1-alpine3.17 as builder
 
 
 # Build argments
+ARG TARGETOS
+ARG TARGETARCH
 ARG LDFLAGS
 ARG PKGNAME
 ARG BUILD
@@ -42,10 +44,15 @@ COPY cmd cmd/
 
 # Build
 RUN env
-RUN go build -ldflags="${LDFLAGS}" -a -o ${PKGNAME} /go/src/github.com/apache/dubbo-admin/cmd/${PKGNAME}/main.go
+RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -ldflags="${LDFLAGS}" -a -o ${PKGNAME} /go/src/github.com/apache/dubbo-admin/cmd/${PKGNAME}/main.go
 
 
 FROM alpine:3.17
+# Add tzdata package
+RUN apk add --no-cache tzdata
+# Set Timezone
+
+# Build
 WORKDIR /
 ARG PKGNAME
 COPY --from=builder /go/src/github.com/apache/dubbo-admin/${PKGNAME} .
diff --git a/Makefile b/Makefile
index 47009e16..5110b55b 100644
--- a/Makefile
+++ b/Makefile
@@ -15,6 +15,7 @@
 
 
 GOOS ?= $(shell go env GOOS)
+GOARCH ?= $(shell go env GOARCH)
 
 # Git information
 GIT_VERSION ?= $(shell git describe --tags --always)
@@ -62,7 +63,8 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
 KUSTOMIZE_VERSION ?= v3.8.7
 CONTROLLER_TOOLS_VERSION ?= v0.10.0
 
-
+## docker buildx support platform
+PLATFORMS ?= linux/arm64,linux/amd64
 
 ##@ General
 
@@ -138,10 +140,34 @@ images: image-dubbo-admin image-dubbo-authority  image-dubbo-admin-ui
 image-dubbo-admin: ## Build docker image with the dubbo admin.
 	docker build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=admin -t ${DUBBO_ADMIN_IMG} .
 
+
+
+.PHONY: image-dubbo-admin-buildx
+image-dubbo-admin-buildx:  ## Build and push docker image for the dubbo admin 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_admin.cross
+	- docker buildx create --name project-dubbo-admin-builder
+	docker buildx use project-dubbo-admin-builder
+	- docker buildx build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=admin  --push --platform=$(PLATFORMS) --tag ${DUBBO_ADMIN_IMG} -f Dockerfile_admin.cross .
+	#- docker buildx build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=admin  --output type=local,dest=./bin/buildx/dubbo-admin --platform=$(PLATFORMS) --tag ${DUBBO_ADMIN_IMG} -f Dockerfile_admin.cross .
+	- docker buildx rm project-dubbo-admin-builder
+	rm Dockerfile_admin.cross
+
 .PHONY: image-dubbo-authority
 image-dubbo-authority: ## Build docker image with the dubbo authority.
 	docker build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=authority -t ${DUBBO_AUTHORITY_IMG} .
 
+.PHONY: image-dubbo-authority-buildx
+image-dubbo-authority-buildx:  ## Build and push docker image for the dubbo authority 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_authority.cross
+	- docker buildx create --name project-dubbo-authority-builder
+	docker buildx use project-dubbo-authority-builder
+	- docker buildx build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=authority  --push --platform=$(PLATFORMS) --tag ${DUBBO_AUTHORITY_IMG} -f Dockerfile_authority.cross .
+	#- docker buildx build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=authority  --output type=local,dest=./bin/buildx/dubbo-authority --platform=$(PLATFORMS) --tag ${DUBBO_AUTHORITY_IMG} -f Dockerfile_authority.cross .
+	- docker buildx rm project-dubbo-authority-builder
+	rm Dockerfile_authority.cross
+
 .PHONY: image-dubbo-admin-ui
 image-dubbo-admin-ui: ## Build docker image with the dubbo-admin-ui.
 	docker build --build-arg LDFLAGS=$(LDFLAGS) --build-arg PKGNAME=dubbo-admin-ui -t ${DUBBO_ADMIN_UI_IMG} ./dubbo-admin-ui