- A specific Java base image not provided by default
- Additional system packages
- Custom modifications for specific requirements
Before building a custom image, confirm that the desired Java version and variant isn’t already provided.
Building with Alternate Java Base
You can specify an alternate Java base image using theBASE_IMAGE build argument.
Example: GraalVM Base Image
Example: Custom OpenJDK Build
Building Multi-Architecture Images
Create images that support multiple CPU architectures (amd64, arm64, armv7).This requires Docker BuildKit/buildx support to be enabled.
Build and Push Multi-Architecture
- Builds for three architectures simultaneously
- Creates a multi-arch manifest
- Pushes to your registry
Build for Local Use
Multi-architecture images cannot be loaded directly into the local Docker daemon. Use one of these approaches: Option 1: Use buildx with load (single architecture)Installing Extra Packages
Add additional packages to the image using distribution-specific build arguments.Debian/Ubuntu Based Images
UseEXTRA_DEB_PACKAGES for apt-based distributions:
Red Hat/Fedora Based Images
UseEXTRA_DNF_PACKAGES for dnf/yum-based distributions:
Alpine Based Images
UseEXTRA_ALPINE_PACKAGES for apk-based distributions:
Complete Build Examples
Minimal Custom Build
Custom Base with Extra Packages
Multi-Arch Production Build
Build Arguments Reference
| Build Argument | Description | Example |
|---|---|---|
BASE_IMAGE | Java base image to use | eclipse-temurin:21-jdk |
EXTRA_DEB_PACKAGES | Packages for Debian/Ubuntu | "curl jq python3" |
EXTRA_DNF_PACKAGES | Packages for RHEL/Fedora | "curl jq python3" |
EXTRA_ALPINE_PACKAGES | Packages for Alpine | "curl jq python3" |
GITHUB_BASEURL | Override GitHub API URL (for development) | http://host.docker.internal:8080 |
APPS_REV | Force refresh of downloaded apps | 1, 2, etc. |
MC_HELPER_VERSION | Override mc-image-helper version | 1.8.1-SNAPSHOT |
Using Your Custom Image
Once built, use your custom image like any other:Development Builds
For development and testing, see the Contributing Guide which covers:- Iterative script development
- Using development copies of bundled tools
- Testing changes without rebuilding
- Local documentation preview
Best Practices
Troubleshooting
Build fails with 'failed to solve' error
Build fails with 'failed to solve' error
Ensure Docker BuildKit is enabled:Or use buildx:
Multi-arch build is slow
Multi-arch build is slow
Multi-architecture builds can be time-consuming because they may require QEMU emulation.Consider:
- Building only needed architectures
- Using native builders for each architecture
- Leveraging build cache
Package installation fails
Package installation fails
Ensure you’re using the correct build argument for your base image’s package manager:
- Debian/Ubuntu:
EXTRA_DEB_PACKAGES - RHEL/Fedora:
EXTRA_DNF_PACKAGES - Alpine:
EXTRA_ALPINE_PACKAGES
Additional Resources
- Docker Build Reference
- Docker Buildx Documentation
- Multi-platform Images Guide
- Contributing Guide for development workflows