Create a Chainguard Container with Azul Zulu
This section shows how to use Azul Zulu with Chainguard containers, regularly-updated, secure-by-default container images.
What are Chainguard Containers?
Chainguard Containers are minimal container images that are secure by default.
In many cases, the Chainguard Containers tagged as :latest
contain only an open-source application and its runtime dependencies. These minimal container images typically do not contain a shell or package manager. Chainguard Containers are built with Wolfi, a Linux undistro designed to produce container images that meet the requirements of a more secure software supply chain.
The main features of Chainguard Containers include:
-
Minimal design, without unnecessary software bloat.
-
Daily builds to ensure container images are up-to-date with available security patches.
-
High quality build-time SBOMs attesting to the provenance of all artifacts within the image.
-
Reproducible builds with Cosign and apko (read more about reproducibility).
For cases where you need container images with shells and package managers to build or debug, most Chainguard Containers come paired with a -dev
variant.
Although the -dev
container image variants have similar security features as their more minimal versions, they feature additional software that is typically not necessary in production environments. We recommend using multi-stage builds to leverage the -dev
variants, copying application artifacts into a final minimal container that offers a reduced attack surface that won’t allow package installations or logins.
Download a Chainguard Zulu Container Image
The container images are available on cgr.dev
and require authentication. This also gives you access to the Chainguard Console, and provides a mechanism for Chainguard to contact you if there are any issues with images you are pulling. This enables Chainguard to notify you of upcoming deprecations, changes in behavior, critical vulnerabilities and remediations for images you have recently pulled.
docker pull cgr.dev/ORGANIZATION/zulu-jdk:latest
Be sure to replace the ORGANIZATION
placeholder with the name used for your organization’s private repository within the Chainguard Registry.
Compatibility Notes
The zulu-jdk
is based on Azul Zulu Builds of OpenJDK (Zulu). These are certified OpenJDK builds provided by Azul Platform Core. Zulu brings tight security and the cost efficiencies you need to run today’s business–critical, Java-based services.
The zulu-jdk
image is part of the Chainguard Images collection, which are minimal, regularly-updated container images designed with security in mind. The image can be pulled from cgr.dev
and is suitable for use in various environments, including production.
Getting Started
To test the zulu-jdk
image, start by pulling the image:
docker pull cgr.dev/ORGANIZATION/zulu-jdk:latest
Replace ORGANIZATION
with your organization’s name.
Next, run a container using the image you just downloaded:
docker run -it --rm cgr.dev/ORGANIZATION/zulu-jdk:latest java -version
This command will start a container and display the Java version to verify that the image is working correctly.
Create a simple Java application, for example, HelloWorld.java
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
Then compile and run the application inside the container:
docker run -it --rm -v $(pwd):/workspace -w /workspace cgr.dev/ORGANIZATION/zulu-jdk:latest javac HelloWorld.java
docker run -it --rm -v $(pwd):/workspace -w /workspace cgr.dev/ORGANIZATION/zulu-jdk:latest java HelloWorld
You should see the output Hello world
, indicating that the image can compile and run Java applications.
Learn More
To better understand how to work with Chainguard Containers, please visit Chainguard Academy and Chainguard Courses.