Deploy Java applications to Azure and Google Cloud using Paketo Buildpacks
Azure and Google Cloud have built-in support for cloud native buildpacks. You can use Azure or Google Cloud to easily deploy Java applications by using the Paketo Buildpack for Liberty with your source code or container images.
This post provides instructions on how to use the Paketo Buildpack for Liberty with Azure and Google Cloud. To learn more about using Azure and Google Cloud, see their respective documentation.
What do you need?
-
An Azure or Google Cloud Account
-
The Azure cli or the gcloud cli
-
Your application source
To build and deploy container images or create a custom builder, you’ll also need:
-
The cloud native buildpack pack CLI
-
Docker or Podman. This post focuses on Docker. For information about using Podman with Paketo, refer to the buildpacks.io documentation for Building on Podman.
-
An externally accessible container registry that can host your images.
The Paketo Buildpack for Liberty is included in the composite Paketo Buildpack for Java that also includes tomcat
and tomee
application servers. Tomcat is the default application server and to use Open Liberty requires a little extra configuration. The Paketo Buildpack for Java includes Bellsoft Liberica as the default JVM provider. To use other JVM providers requires extra configuration.
You can set the application server that the Paketo Buildpack for Java uses by specifying the BP_JAVA_APP_SERVER
environment variable and select an alternate JVM provider using a project descriptor.
Let’s get started
Create the project descriptior file, project.toml
, in the application’s root source directory. At a minimum, project.toml
must specify the BP_JAVA_APP_SERVER=liberty
environment variable but can contain other environment variables that are consumed by buildpacks.
To use the alternate and preferred Eclipse OpenJ9 JVM, change the order that the buildpacks run in the project descriptor. To minimize the size of the application container image, the buildpack installs the Liberty kernel profile by default. You can override the profile using the BP_LIBERTY_PROFILE
environment variable or use the BP_LIBERTY_FEATURES
environment variable to install the Liberty features your application requires.
For example, your project descriptor might contain the following content to use the Liberty runtime and install Eclipse OpenJ9, the Liberty kernel profile, and a set of Liberty features:
[[build.env]]
name = "BP_JAVA_APP_SERVER"
value = "liberty"
[[build.env]]
name = "BP_LIBERTY_FEATURES"
value = "jsonb-2.0 mpconfig-3.0 mpmetrics-4.0 restfulws-3.0 jsonp-2.0 cdi-3.0"
[[build.buildpacks]]
uri = "docker://gcr.io/paketo-buildpacks/eclipse-openj9"
[[build.buildpacks]]
uri = "docker://gcr.io/paketo-buildpacks/java"
Build and push a container image with Azure
Use the az acr pack build command to build and push a container image using the built-in cloud native buildpack support.
For example, the following command builds and pushes the container image using the mycr
Azure container registry and the full Paketo Buildpacks builder. The resulting image name is myapp
and the application source resides in ~/myappsourcedir
. The application source can also be specified as the URL of a Git repo. This example assumes the mycr
Azure container registry was previously created.
az acr pack build
--registry mycr
--pull --builder paketobuildpacks/builder:full
--image myapp
~/myappsourcedir
Build and push a container image with Google Cloud
Use the gcloud builds command to build and push a container image using the built-in cloud native buildpack support. Follow the Before you begin instructions to setup your environment.
The command uses the following basic syntax:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
In the following example, us-east1
is the LOCATION, paketobuildpacks
is the PROJECT_ID, paketobuildpacktest
is the REPO_NAME and javatest
is the IMAGE_NAME. The command is executed from the application’s root directory.
gcloud builds submit --pack
image=us-east1-docker.pkg.dev/paketobuildpacks/paketobuildpacktest/javatest,builder=paketobuildpacks/builder:full
Liberty environment variables you can set in the project.toml
file
- BP_LIBERTY_INSTALL_TYPE
-
Specifies the Install type of Liberty. Open Liberty (value of
ol
) is the default. Usewlp
for WebSphere Liberty. - BP_LIBERTY_PROFILE
-
Specifies which Liberty profile to install. Valid profiles for Liberty are documented in the buildpacks documentation. The default profile is
kernel
. - BP_LIBERTY_FEATURES
-
Specifies a space-separated list of Liberty features to be installed with the Liberty runtime. Supports any valid Liberty feature.
Take full advantage of the Paketo Buildpack for Liberty with the pack build CLI
Some features of the Paketo Buildpack for Liberty are not easily available to Azure or Google Cloud. Features like installing iFixes, custom features, and installing from a packaged server or server directory aren’t available when you use the built-in support to create the container image.
For these features, you can use the pack build
CLI to create the container image, tag and push the image to an external container registry. Then, use Azure or Google Cloud to deploy and manage your container by pulling your container image from the container registry. See Introducing the Paketo Liberty Buildpack for details on using the pack build
CLI with Liberty.