From 575ff33459aa507b679222b0fd1e5a77bc22e5d5 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Wed, 17 Nov 2021 14:20:00 +0800 Subject: [PATCH] Add Docker images for arm64 architecture --- .github/workflows/publish-docker.yaml | 6 +- CHANGES.md | 1 + Makefile | 71 +++++++++-------------- docker/oap/{Dockerfile.oap => Dockerfile} | 6 +- docker/ui/{Dockerfile.ui => Dockerfile} | 6 +- 5 files changed, 33 insertions(+), 57 deletions(-) rename docker/oap/{Dockerfile.oap => Dockerfile} (91%) rename docker/ui/{Dockerfile.ui => Dockerfile} (92%) diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/publish-docker.yaml index ddba718bc0615..df0b72b4608dc 100644 --- a/.github/workflows/publish-docker.yaml +++ b/.github/workflows/publish-docker.yaml @@ -52,7 +52,5 @@ jobs: registry: ${{ env.HUB }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build docker image - run: | - make docker || make docker - make docker.push || make docker.push + - name: Build and push docker images + run: make docker.push || make docker.push diff --git a/CHANGES.md b/CHANGES.md index 8fd812759220a..e448ff9d7a5c5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Release Notes. * E2E tests immigrate to e2e-v2. * Support JDK 16 and 17. +* Add Docker images for arm64 architecture. #### OAP Server diff --git a/Makefile b/Makefile index 7aa6b248109cb..de38f9738e277 100644 --- a/Makefile +++ b/Makefile @@ -43,64 +43,47 @@ OAP_NAME ?= oap UI_NAME ?= ui TAG ?= latest -.SECONDEXPANSION: #allow $@ to be used in dependency list - -.PHONY: docker docker.all docker.oap +.PHONY: docker docker.all docker: init build.all docker.all DOCKER_TARGETS:=docker.oap docker.ui -docker.all: $(DOCKER_TARGETS) - ifneq ($(SW_OAP_BASE_IMAGE),) BUILD_ARGS := $(BUILD_ARGS) --build-arg BASE_IMAGE=$(SW_OAP_BASE_IMAGE) endif BUILD_ARGS := $(BUILD_ARGS) --build-arg DIST=$(DIST) --build-arg SKYWALKING_CLI_VERSION=$(CLI_VERSION) -docker.oap: $(CONTEXT)/$(DIST) -docker.oap: $(SW_ROOT)/docker/oap/Dockerfile.oap -docker.oap: $(SW_ROOT)/docker/oap/docker-entrypoint.sh -docker.oap: $(SW_ROOT)/docker/oap/log4j2.xml -docker.oap: NAME = $(OAP_NAME) -docker.oap: - $(DOCKER_RULE) +%.ui: NAME = $(UI_NAME) +%.oap: NAME = $(OAP_NAME) -docker.ui: $(CONTEXT)/$(DIST) -docker.ui: $(SW_ROOT)/docker/ui/Dockerfile.ui -docker.ui: $(SW_ROOT)/docker/ui/docker-entrypoint.sh -docker.ui: $(SW_ROOT)/docker/ui/logback.xml -docker.ui: NAME = $(UI_NAME) -docker.ui: +docker.%: PLATFORMS = +docker.%: LOAD_OR_PUSH = --load +push.%: PLATFORMS = --platform linux/amd64,linux/arm64 +push.%: LOAD_OR_PUSH = --push + +docker.% push.docker.%: $(CONTEXT)/$(DIST) $(SW_ROOT)/docker/%/* $(DOCKER_RULE) -# $@ is the name of the target +docker.all: $(DOCKER_TARGETS) +docker.push: $(DOCKER_TARGETS:%=push.%) + # $^ the name of the dependencies for the target # Rule Steps # ############## -# 1. Make a directory $(DOCKER_BUILD_TOP)/%@ -# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$@ -# 3. This rule then changes directories to $(DOCKER_BUID_TOP)/$@ -# 4. This rule runs $(BUILD_PRE) prior to any docker build and only if specified as a dependency variable -# 5. This rule finally runs docker build passing $(BUILD_ARGS) to docker if they are specified as a dependency variable - -DOCKER_RULE=time (mkdir -p $(DOCKER_BUILD_TOP)/$@ && cp -r $^ $(DOCKER_BUILD_TOP)/$@ && cd $(DOCKER_BUILD_TOP)/$@ && $(BUILD_PRE) docker build --no-cache $(BUILD_ARGS) -t $(HUB)/$(NAME):$(TAG) -f Dockerfile$(suffix $@) .) - -# for each docker.XXX target create a push.docker.XXX target that pushes -# the local docker image to another hub -# a possible optimization is to use tag.$(TGT) as a dependency to do the tag for us -push.docker.oap: NAME = $(OAP_NAME) -push.docker.ui: NAME = $(UI_NAME) - -$(foreach TGT,$(DOCKER_TARGETS),push.$(TGT)): push.%: % - time (docker push $(HUB)/$(NAME):$(TAG)) - -# create a DOCKER_PUSH_TARGETS that's each of DOCKER_TARGETS with a push. prefix -DOCKER_PUSH_TARGETS:= -$(foreach TGT,$(DOCKER_TARGETS),$(eval DOCKER_PUSH_TARGETS+=push.$(TGT))) - -# Will build and push docker images. -docker.push: $(DOCKER_PUSH_TARGETS) - - +# 1. Make a directory $(DOCKER_BUILD_TOP)/$(NAME) +# 2. This rule uses cp to copy all dependency filenames into into $(DOCKER_BUILD_TOP/$(NAME) +# 3. This rule finally runs docker build passing $(BUILD_ARGS) to docker if they are specified as a dependency variable + +define DOCKER_RULE + mkdir -p $(DOCKER_BUILD_TOP)/$(NAME) + cp -r $^ $(DOCKER_BUILD_TOP)/$(NAME) + docker buildx create --use --driver docker-container --name skywalking_main > /dev/null 2>&1 || true + docker buildx build $(PLATFORMS) $(LOAD_OR_PUSH) \ + --no-cache $(BUILD_ARGS) \ + -t $(HUB)/$(NAME):$(TAG) \ + -t $(HUB)/$(NAME):latest \ + $(DOCKER_BUILD_TOP)/$(NAME) + docker buildx rm skywalking_main || true +endef diff --git a/docker/oap/Dockerfile.oap b/docker/oap/Dockerfile similarity index 91% rename from docker/oap/Dockerfile.oap rename to docker/oap/Dockerfile index 02b99ca770d2b..7f42d9d2171a8 100644 --- a/docker/oap/Dockerfile.oap +++ b/docker/oap/Dockerfile @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -ARG BASE_IMAGE='adoptopenjdk/openjdk11:alpine' +ARG BASE_IMAGE='openjdk:11-jre' ARG SKYWALKING_CLI_VERSION @@ -22,8 +22,6 @@ FROM apache/skywalking-cli:$SKYWALKING_CLI_VERSION as cli FROM $BASE_IMAGE -RUN apk add --no-cache openssl - WORKDIR /skywalking ENV JAVA_OPTS=" -Xms2G " @@ -51,4 +49,4 @@ RUN mkdir ext-config; \ EXPOSE 12800 11800 1234 -ENTRYPOINT ["sh", "docker-entrypoint.sh"] +ENTRYPOINT ["bash", "docker-entrypoint.sh"] diff --git a/docker/ui/Dockerfile.ui b/docker/ui/Dockerfile similarity index 92% rename from docker/ui/Dockerfile.ui rename to docker/ui/Dockerfile index 760631c455fa8..e13447e7ae194 100644 --- a/docker/ui/Dockerfile.ui +++ b/docker/ui/Dockerfile @@ -14,17 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM adoptopenjdk/openjdk11:alpine-jre +FROM openjdk:11-jre ENV JAVA_OPTS=" -Xms256M " \ SW_OAP_ADDRESS="http://127.0.0.1:12800" WORKDIR skywalking -RUN set -ex; \ - apk add --no-cache \ - bash - ARG DIST COPY "$DIST" .