Deploying Spring Boot War in Tomcat running in Docker

Steps to Dockerize Spring Boot Application

If you want to run SpringBoot application as JAR file with Docker, check my other post — Running Spring Boot JAR with Docker

First things First — Lets create a WAR file

As you know, Spring Boot based application by default creates executable JAR. We need to configure a bit to make Spring Boot create a WAR file as output.

  1. Change packing to war in pom.xml
<packaging>war</packaging>

2. Configure a custom name for your war file by setting finalName property in spring-boot-maven-plugin

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>sample</finalName>
</configuration>
</plugin>

Remember : In order for your application to run in standalone tomcat, your code needs little tweaks. Please refer it here

https://github.com/iamvickyav/Developer-Tips/blob/master/Deploy-SpringBootApp-In-Tomcat.md

Time to Dockerize our Application

Lets start with creating a Dockerfile

FROM tomcat:latest
ADD target/sample.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]

DockerFile demystified

FROM — Base image on top of which our custom image is to be build

ADD — Copy war file into webapps folder inside Docker

EXPOSE — Expose port 8080 outside Docker container

CMD — The command to be executed when the Docker image is run

Here is our docker-compose.yml file

Now lets run the following command

> docker-compose up —-build

Since we specified DOT (.) in build, docker-compose will search for Dockerfile in current directory & will build the image with name specified in image property (in this case its test-img)

Now your application is running in Tomcat inside Docker !!

Source code — https://github.com/iamvickyav/SpringBoot-Docker-Tomcat

Next :

Step by Step instruction on how to build docker image and start the Docker container via Jenkins

https://medium.com/@iamvickyav/build-up-docker-image-via-jenkins-in-local-43b4c5ab4a2b

Twitter @IamVickyAV