DirectorySecurity AdvisoriesPricing
/
Sign in
Directory
apicurio-registry logo

apicurio-registry

Last changed

Request a free trial

Contact our team to test out this image for free. Please also indicate any other images you would like to evaluate.

Tags
Overview
Comparison
Provenance
Specifications
SBOM
Vulnerabilities
Advisories

Chainguard Container for apicurio-registry

Apicurio Registry is a datastore for sharing standard event schemas and API designs across event-driven and API architectures.

Chainguard Containers are regularly-updated, secure-by-default container images.

Download this Container Image

For those with access, this container image is available on cgr.dev:

docker pull cgr.dev/ORGANIZATION/apicurio-registry:latest

Be sure to replace the ORGANIZATION placeholder with the name used for your organization's private repository within the Chainguard Registry.

Image Components

This module provides two container images:

  • apicurio-registry: The main registry backend (Java/Quarkus application)
  • apicurio-registry-ui: The web UI frontend (nginx serving static assets)

Compatibility Notes

The Chainguard Apicurio Registry images are designed as drop-in replacements for the upstream images:

Chainguard ImageUpstream Image

cgr.dev/chainguard/apicurio-registry

quay.io/apicurio/apicurio-registry

cgr.dev/chainguard/apicurio-registry-ui

quay.io/apicurio/apicurio-registry-ui

The Chainguard images differ from upstream in the following ways:

No JBoss Container Scripts

The upstream image includes JBoss container scripts (/opt/jboss/container/) that process various environment variables for JVM configuration, debugging, and proxy settings. The Chainguard image runs the Quarkus application directly without these scripts.

Environment variables NOT supported in the Chainguard image:

CategoryVariablesUpstream Behavior

JVM Memory

JAVA_MAX_MEM_RATIO

Sets -XX:MaxRAMPercentage (default: 80%)

Garbage Collection

GC_MIN_HEAP_FREE_RATIO, GC_MAX_HEAP_FREE_RATIO, GC_TIME_RATIO, GC_ADAPTIVE_SIZE_POLICY_WEIGHT, GC_CONTAINER_OPTIONS, GC_METASPACE_SIZE, GC_MAX_METASPACE_SIZE

Configures GC tuning parameters

Debugging

JAVA_DEBUG, JAVA_DEBUG_PORT

Enables JDWP debug agent on specified port (default: 5005)

Diagnostics

JAVA_DIAGNOSTICS

Enables JVM diagnostic options

Proxy

http_proxy, https_proxy

Translates to Java -Dhttp.proxyHost etc.

JMX

AB_ENABLED=jmx_exporter

Enables JMX exporter

Application

JAVA_APP_DIR, JAVA_APP_JAR, JAVA_MAIN_CLASS, JAVA_LIB_DIR, JAVA_CLASSPATH, JAVA_APP_NAME

Controls application discovery and classpath

JVM Options

JAVA_OPTS, JAVA_OPTS_APPEND

Appends custom JVM options

To achieve equivalent functionality in Chainguard images, pass JVM options directly via JAVA_OPTIONS:

# Example: Set memory limits and enable debugging
docker run -d \
  -e JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:MaxRAMPercentage=80.0 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" \
  cgr.dev/ORGANIZATION/apicurio-registry:latest

Minimal Base Image

The Chainguard image is built on a minimal base with only the essential components:

  • OpenJDK 17 runtime
  • Quarkus application JARs
  • No shell or package manager in production variants

UI Image Differences (apicurio-registry-ui)

The Chainguard UI image differs from the upstream image (quay.io/apicurio/apicurio-registry-ui) in the following ways:

No S2I (Source-to-Image) Scripts

The upstream UI image uses Red Hat's S2I framework with scripts in /usr/libexec/s2i/. The Chainguard image runs nginx directly without S2I:

UpstreamChainguard

Entrypoint sources /usr/libexec/s2i/run

Entrypoint runs nginx -g "daemon off;" directly

Includes S2I assemble/run scripts

No S2I scripts included

Nginx Configuration Changes

The nginx configuration has been modified for compatibility with Wolfi/Alpine nginx:

ChangeReason

Removed ssl_ciphers PROFILE=SYSTEM;

Red Hat-specific cipher configuration not supported on Wolfi

Updated listen ... http2; to listen ...; http2 on;

Deprecated directive syntax in nginx 1.25.1+

Removed TLS server block

TLS should be handled by ingress controller or sidecar proxy

If you need TLS termination at the UI container, configure it via an ingress controller, service mesh sidecar, or mount certificates and provide a custom nginx configuration.

Storage Backends

Apicurio Registry supports multiple storage backends:

  • In-memory (default): Data is not persisted across restarts
  • KafkaSQL: Uses Apache Kafka for persistent storage

Configure the storage backend using environment variables:

# In-memory (default)
APICURIO_STORAGE_KIND=mem

# Kafka storage
APICURIO_STORAGE_KIND=kafkasql
APICURIO_KAFKASQL_BOOTSTRAP_SERVERS=kafka:9092

Running with Docker

Basic Setup (In-memory Storage)

# Start the registry backend
docker run -d \
  --name apicurio-registry \
  -p 8080:8080 \
  cgr.dev/ORGANIZATION/apicurio-registry:latest

# Start the UI (optional)
docker run -d \
  --name apicurio-registry-ui \
  -p 8888:8080 \
  -e REGISTRY_API_URL="http://localhost:8080/apis/registry/v3" \
  cgr.dev/ORGANIZATION/apicurio-registry-ui:latest

With Kafka Storage

# Start Kafka first (using Confluent Kafka as an example)
docker network create apicurio-net

docker run -d \
  --name kafka \
  --hostname kafka \
  --network apicurio-net \
  -e KAFKA_NODE_ID=1 \
  -e KAFKA_PROCESS_ROLES='broker,controller' \
  -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP='CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT' \
  -e KAFKA_LISTENERS='PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093' \
  -e KAFKA_ADVERTISED_LISTENERS='PLAINTEXT://kafka:9092' \
  -e KAFKA_CONTROLLER_LISTENER_NAMES='CONTROLLER' \
  -e KAFKA_CONTROLLER_QUORUM_VOTERS='1@kafka:9093' \
  -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
  -e CLUSTER_ID='MkU3OEVBNTcwNTJENDM2Qk' \
  confluentinc/cp-kafka:latest

# Start Apicurio Registry with Kafka storage
docker run -d \
  --name apicurio-registry \
  --network apicurio-net \
  -p 8080:8080 \
  -e APICURIO_STORAGE_KIND=kafkasql \
  -e APICURIO_KAFKASQL_BOOTSTRAP_SERVERS=kafka:9092 \
  cgr.dev/ORGANIZATION/apicurio-registry:latest

Deployment on Kubernetes

Basic Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apicurio-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apicurio-registry
  template:
    metadata:
      labels:
        app: apicurio-registry
    spec:
      containers:
      - name: registry
        image: cgr.dev/ORGANIZATION/apicurio-registry:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: apicurio-registry
spec:
  selector:
    app: apicurio-registry
  ports:
  - port: 8080
    targetPort: 8080

UI Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apicurio-registry-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apicurio-registry-ui
  template:
    metadata:
      labels:
        app: apicurio-registry-ui
    spec:
      containers:
      - name: registry-ui
        image: cgr.dev/ORGANIZATION/apicurio-registry-ui:latest
        ports:
        - containerPort: 8080
        env:
        - name: REGISTRY_API_URL
          value: "http://apicurio-registry:8080/apis/registry/v3"
---
apiVersion: v1
kind: Service
metadata:
  name: apicurio-registry-ui
spec:
  selector:
    app: apicurio-registry-ui
  ports:
  - port: 8080
    targetPort: 8080

TLS Configuration

Enable TLS on the registry using Quarkus HTTP configuration:

env:
- name: QUARKUS_HTTP_SSL_PORT
  value: "8443"
- name: QUARKUS_HTTP_SSL_CERTIFICATE_FILES
  value: "/etc/tls/tls.crt"
- name: QUARKUS_HTTP_SSL_CERTIFICATE_KEY_FILES
  value: "/etc/tls/tls.key"
- name: QUARKUS_HTTP_INSECURE_REQUESTS
  value: "disabled"  # or "redirect" to redirect HTTP to HTTPS

Mount TLS certificates from a Kubernetes Secret:

volumeMounts:
- name: tls-certs
  mountPath: /etc/tls
  readOnly: true
volumes:
- name: tls-certs
  secret:
    secretName: apicurio-registry-tls

Documentation and Resources

  • Apicurio Registry Documentation
  • Apicurio Registry GitHub
  • Apicurio Registry API Documentation

What are Chainguard Containers?

Chainguard's free tier of Starter container images are built with Wolfi, our minimal Linux undistro.

All other Chainguard Containers are built with Chainguard OS, Chainguard's minimal Linux operating system designed to produce container images that meet the requirements of a more secure software supply chain.

The main features of Chainguard Containers include:

For cases where you need container images with shells and package managers to build or debug, most Chainguard Containers come paired with a development, or -dev, variant.

In all other cases, including Chainguard Containers tagged as :latest or with a specific version number, the container images include only an open-source application and its runtime dependencies. These minimal container images typically do not contain a shell or package manager.

Although the -dev container image variants have similar security features as their more minimal versions, they include additional software that is typically not necessary in production environments. We recommend using multi-stage builds to copy artifacts from the -dev variant into a more minimal production image.

Need additional packages?

To improve security, Chainguard Containers include only essential dependencies. Need more packages? Chainguard customers can use Custom Assembly to add packages, either through the Console, chainctl, or API.

To use Custom Assembly in the Chainguard Console: navigate to the image you'd like to customize in your Organization's list of images, and click on the Customize image button at the top of the page.

Learn More

Refer to our Chainguard Containers documentation on Chainguard Academy. Chainguard also offers VMs and Librariescontact us for access.

Trademarks

This software listing is packaged by Chainguard. The trademarks set forth in this offering are owned by their respective companies, and use of them does not imply any affiliation, sponsorship, or endorsement by such companies.

Licenses

Chainguard's container images contain software packages that are direct or transitive dependencies. The following licenses were found in the "latest" tag of this image:

License information unavailable

For a complete list of licenses, please refer to this Image's SBOM.

Software license agreement

Compliance

Chainguard Containers are SLSA Level 3 compliant with detailed metadata and documentation about how it was built. We generate build provenance and a Software Bill of Materials (SBOM) for each release, with complete visibility into the software supply chain.

SLSA compliance at Chainguard

This image helps reduce time and effort in establishing PCI DSS 4.0 compliance with low-to-no CVEs.

PCI DSS at Chainguard

Category
Application

The trusted source for open source

Talk to an expert
© 2025 Chainguard. All Rights Reserved.
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsIntegrationsPricing