Skip to content

[ZEPPELIN-6068] Support ARM64 (multi-arch) Docker images - #5523

Open
HwangRock wants to merge 1 commit into
apache:masterfrom
HwangRock:ZEPPELIN-6068-arm64-docker-image
Open

HwangRock wants to merge 1 commit into
apache:masterfrom
HwangRock:ZEPPELIN-6068-arm64-docker-image

Conversation

@HwangRock

Copy link
Copy Markdown
Contributor

What is this PR for?

Adds ARM64 (multi-arch) support for the Zeppelin Docker images so they can run natively on arm64 hosts such as Apple Silicon.

The Dockerfiles previously hardcoded x86 (amd64) specific values, so an arm64 build failed:

  • JAVA_HOME was pinned to java-11-openjdk-amd64
  • Miniconda was downloaded as the x86_64 installer
  • micromamba was pulled from the linux-64 channel

Each of these is now selected from the TARGETARCH build argument (injected automatically by docker buildx), so the same Dockerfile builds for both linux/amd64 and linux/arm64.

While fixing the interpreter image I also found the micromamba source (micromamba.snakepit.net) is dead and currently breaks the amd64 build too; it is replaced with the current endpoint (micro.mamba.pm). The all-in-one image's conda environment creation is changed from mamba env update --prune to mamba env create, which is required for mamba 2.x (the former is rejected when the environment does not exist yet).

A manually-triggered docker-publish GitHub Actions workflow is added to build and push the multi-arch apache/zeppelin image to Docker Hub. Docker Hub credentials are referenced from repository secrets (DOCKERHUB_USER / DOCKERHUB_TOKEN); the login step is skipped on a dry run.

What type of PR is it?

Improvement

What is the Jira issue?

ZEPPELIN-6068

How should this be tested?

Built the all-in-one image locally for linux/arm64 via QEMU buildx against the released 0.12.0 artifact; the build ran end to end and produced a linux/arm64 image. (Published versions are built by the new workflow.)

Local arm64 build log (QEMU, Z_VERSION=0.12.0)
$ docker buildx build --platform linux/arm64 --build-arg Z_VERSION=0.12.0 \
    -t zeppelin-arm64-test:0.12.0 --load scripts/docker/zeppelin/bin

#8 [ 4/10] RUN ... conda install mamba ... && mamba env create -f /env_python_3.yml
#8   Prefix: /opt/conda/envs/python_3   (python=3.7, numpy=1.19.5, ... resolved as linux-aarch64)
#8 DONE
#9 [ 5/10] RUN ... Download Zeppelin binary (zeppelin-0.12.0-bin-all.tgz) ... DONE
#14 [10/10] WORKDIR /opt/zeppelin  DONE
#15 exporting to image
#15 naming to docker.io/library/zeppelin-arm64-test:0.12.0
#15 DONE 275.4s

$ docker image inspect zeppelin-arm64-test:0.12.0 --format '{{.Os}}/{{.Architecture}}'
linux/arm64

Questions:

  • Does the license files need to update? No
  • Is there breaking changes for older versions? No
  • Does this needs documentation? Yes, docs/setup/deployment/docker.md is updated.

- Select architecture-specific parts (JAVA_HOME, Miniconda installer,
  micromamba) from TARGETARCH so the images build for amd64 and arm64
- Replace the dead micromamba source (snakepit) with micro.mamba.pm
- Create the conda env with `mamba env create` (required on mamba 2.x)
- Make Z_VERSION a build ARG for the all-in-one image
- Add the docker-publish workflow for multi-arch Docker Hub push
- Update the docker deployment docs to use buildx
@jongyoul

jongyoul commented Oct 7, 2026

Copy link
Copy Markdown
Member

@HwangRock Hello, as you talked with another channel, can we try to build a nightly-version of Apache Zeppelin everyday if there's any new commit in the master branch? It uses the release version to build a docker image, but we'd better build by actions with the latest master. It could be triggered daily basis and manually. WDYT? I got a confirmation from INFRA team being set by the proper secrets.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants