Containerizing SpringBoot Application With Jib
How to create docker or OCI complaint images without installing any docker client or using Dockerfile for our Spring Boot application with Jib.
Join the DZone community and get the full member experience.Join For Free
In this article we will learn about how to create docker or OCI complaint images without installing any docker client or using Dockerfile for our SpringBoot application. We will be doing all of this with the help of Jib.
What Is Jib?
Jib is Java containerizer from Google that lets Java developers build containers using the build tools like Maven, Gradle etc.
But that’s not all that is really interesting about Jib because you don’t need to know anything about installing docker, maintaining Dockerfile, etc. As a developer, you only care about the artifact(jar, war, etc.) you will produce, and you don’t have to deal with any of the docker nonsense(build/push, etc.).
Wow, this is really powerful! But how?
How To Jib
With Jib, you can containerize your Java applications in no time by adding Maven or Gradle plugin to your pom.xml.or build.gradle file. It is that simple. We will be covering Maven first and in later post-Gradle. Let’s get started then.
We will be using spring initializr to generate a working spring-boot project. Source code of our SpringBoot application is available here, and it just prints a Hello message when the image is pushed via Jib and the image is run through docker.
Once we have set up ready with IDE, we can proceed with the next step.
Setting Up Maven
For maven, you can paste the above content in your pom.xml plugin section, and you are good to go. But I will try to explain <from> and <image> tags here.
<from> Configures the base image to build your application on top of.
Typically you don’t need to provide <from> as by default, it uses distroless java8 image. However, I have used java11, so I have explicitly mentioned that here. Moreover, depending upon your use case, you may want to use a different base image.
<image > This refers to the target image that will pushed to the container registry.
I have used the docker registry, but you can use any cloud provider(ECS, GCR, ACR) container registry.
To use further options with the plugin, you can refer to the documentation.
Setting Credentials For Registry
To push an image, we would need to add registry credentials to maven settings.xml. Since we are just doing a demo, it’s ok to provide credentials this way but avoid using it as it is not secure. You may want to secure credentials as mentioned here.
Building an Image
To build an image, we can do it in the following ways.
For example, in IntelliJ, you can go to maven view of your project, then go under Plugins>jib, then right-click and run the maven build. You may want to create an IntelliJ run configuration that can run maven goals like clean, compile, etc., then push your image.
2. Using the command line
Just run the below command to build an image of your application. Make sure you have maven installed.
It will compile, build, and then push your application's image to the configured container registry.
Following is the output.
Running an Image
We have successfully pushed the image(image name:spring-boot-jib-image) to a docker registry. Now we can run the image using docker.
As you can see that our application is running inside a container. Now just run the curl command, and you can see that we got a hello message from our spring-boot application.
In this article, we have learned how we can containerize our Java applications without docker. Additionally, with Jib, you can build images using docker, but that’s not the X factor. Other benefits of using Jib for your Java applications include super easy to integrate with Java applications, faster builds, reproducible builds, Backed by Google, etc. You can go through this link to know about Jib's benefits in detail.
Published at DZone with permission of Ashish Choudhary. See the original article here.
Opinions expressed by DZone contributors are their own.