DEV Community

Ada Cheng
Ada Cheng

Posted on • Edited on

4 1

Running Java Microservices in Docker

Today, I managed to run my microservices in docker environment successfully.

Table of Contents

Build the microservices

I have written four microservices using Spring Boot. One is Eureka Server and the other three are Eureka Clients.

Docker Tag Name Description Port Source Code Path
ms-server-eureka Spring Boot Application acting as Eureka Discovery Server. 8001 $MS_SRC_BASE/ms.server.eureka/
ms-client-user Spring Boot Client Application connecting to MongoDB. 8002 $MS_SRC_BASE/ms.client.user/
ms-client-product Spring Boot Client Application connecting to MongoDB. 8003 $MS_SRC_BASE/ms.client.product/
ms-client-cart Spring Boot Client Application connecting to MongoDB. 8004 $MS_SRC_BASE/ms.client.cart/
ms-mongodb MongoDB 27017 NIL

Firstly, create Dockerfile for each of the microservice.

Here below is the example for the User Microservice.

FROM openjdk:17-ea-22
COPY target/ms.client.user-0.0.1-SNAPSHOT.jar ms.client.user-SNAPSHOT.jar
EXPOSE 8001
ENTRYPOINT ["java","-jar","/ms.client.user-SNAPSHOT.jar"]
Enter fullscreen mode Exit fullscreen mode

Secondly, build each of the Spring Boot Applications and package to JAR files.

./mvnw -Dmaven.test.skip=true clean package
Enter fullscreen mode Exit fullscreen mode

Thirdly, build docker image of each of the Spring Boot Applications.
*Make sure Docker Engine is running on your development host.

cd $MS_SRC_BASE/ms.server.eureka/
docker build --tag=ms-server-eureka:latest .
cd $MS_SRC_BASE/ms.client.user/
docker build --tag=ms-client-user:latest .
cd $MS_SRC_BASE/ms.client.product/
docker build --tag=ms-client-product:latest .
cd $MS_SRC_BASE/ms.client.cart/
docker build --tag=ms-client-cart:latest .
Enter fullscreen mode Exit fullscreen mode

Deployment

  • In order that the containers can find each other, use --network container:[containerName] to bind to a master container. In this case, I use ms-server-eureka as the master container.
  • All ports are exposed by publishing the ports on the master container.
docker run --name ms-server-eureka -p 8000-8003:8000-8003 -p 27017:27017 ms-server-eureka:latest
docker run --name ms-mongodb --network container:ms-server-eureka -d mongo
docker run --name ms-client-user --network container:ms-server-eureka ms-client-user:latest
docker run --name ms-client-product --network container:ms-server-eureka ms-client-product:latest
docker run --name ms-client-cart --network container:ms-server-eureka ms-client-cart:latest
Enter fullscreen mode Exit fullscreen mode

Verification

  • Check the Eureka Server status by opening http://localhost:8000/ in a web browser.

Eureka

  • Get data from the User Microservice by opening http://localhost:8001/user/search/findByLastName?name=Administrator in a web browser.

User Microservice

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (2)

Collapse
 
itsraghz profile image
Raghavan alias Saravanan Muthu

Great. would be great if you could have made it as a series by explaining each of the microservices as well in a post!

Collapse
 
adafycheng profile image
Ada Cheng

Great idea! This is also what I want to do in near future.

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay