Ping Identity DevOps Parent Images — pingbase and pingbase-java
Ping product Docker images do not build an operating system or Java runtime from scratch. Every product image starts from a Ping-provided parent image — pingidentity/pingbase (OS only) or pingidentity/pingbase-java (OS plus Java runtime) — published on Docker Hub. The product layer is added on top of the parent image, so product builds pull the parent automatically for the build process.
The JVM distribution bundled in pingbase-java is BellSoft Liberica. JDK tracks 17, 21, and 25 are built; 25 is the default for all shipping products (17 and 21 exist for custom and back-level builds).
Available tags
| Image | Tag | Contents |
|---|---|---|
|
|
Alpine 3.24 base OS. Multi-arch (amd64 + arm64). |
|
|
Rolling pointer to the newest supported Alpine major. Use only if you want OS major upgrades automatically. |
|
|
Red Hat UBI 9 minimal base OS. Multi-arch (amd64 + arm64). |
|
|
Rolling pointer to the newest supported UBI major. |
|
|
Alpine 3.24 plus the Liberica JDK. Multi-arch (amd64 + arm64). |
|
|
UBI 9 plus the Liberica JDK. Multi-arch (amd64 + arm64). |
|
|
Same as the JDK variants, with the Liberica JRE (smaller runtime footprint). |
Tag names are stable while the image content is rebuilt regularly (and on demand, for example for CVE fixes) to float with upstream patch updates. The OS in the tag is pinned to the OS major (alpine3.24, ubi9); moving to a newer OS major is a deliberate change, not an automatic update.
Update and pinning policy
These tags are mutable: a tag points at the latest build for that OS major and Java version, and the image it resolves to changes over time. This mirrors the floating-tag behavior of our product images (see release tags).
To pin a specific build, reference the image by its digest rather than its tag, for example pingbase-java@sha256:…. The digest is the immutability primitive: it identifies exactly one image. If your deployment pipeline records image digests, a re-pull of a pinned image can never pick up unexpected content.
Signature verification
Parent images published to Docker Hub are signed with Cosign using the same KMS-backed key as our product images. Verify them with the published public key before promoting or deploying; for step-by-step instructions, see Image Signature Verification.
Runtime contract
Product images inherit the following from the parent images:
-
User: runs as
9031:0(userping, group root). Product images that need to install or modify content during the build switch toUSER 0:0for those steps and return to the default. -
Init:
tiniruns as PID 1 (/sbin/tinion Alpine,/usr/local/bin/tinion UBI), forwarding signals and reaping zombies. Product images chain their startup through it. -
Working directory:
/. Product images set their own working directories explicitly. -
Java home:
JAVA_HOMEpoints at the Liberica installation (/usr/lib/jvm/bellsoft-java<N>-lite…); on Alpine aJAVA_HOMEsymlink at/opt/javais preserved by product images for compatibility.
The parent images intentionally stay minimal: they carry no product hooks, staging logic, or server-profile handling. That framework lives in each product image.
Using a parent image in your own builds
If you build custom images from our products, reference the parent image directly:
FROM pingidentity/pingbase-java:alpine3.24-jdk25
The tag to use mirrors the product build matrix: the OS flavor (alpine3.24 for Alpine, ubi9 for UBI) and the JDK track (jdk17, jdk21, jdk25) follow the product’s versions.json shim and jvm values. For building a product image with your own product bits, see Build a Docker Product Image Locally.
Copyright © 2026 Ping Identity Corporation