Now open the terminal and go to the Spring Boot employee-producer project folder.
Next we will build an image with the name producer.
docker image build -t employee-producer .
![docker-image-build](static/docker-image-build.jpg)
Next we will run the above image as a container named producer. Also we will be publishing the docker port 8080 to centos port 8080.
docker container run --name producer -p 8080:8080 -d employee-producer
So our employee container has started.
We can test this by going to localhost:8080/employee, we will see that our application is deployed successfully.
Employee Consumer -
![docker-boot-employee](static/docker-boot-employee.jpg)
We have created and started a container named producer where we have deployed the employee-producer service.
So the only change we will be making is while consuming the employee producer service we will be using this container named producer instead of localhost:8080.
So in the ConsumerControllerClient class we will be having the base url as http://producer:8080/employee instead of http://localhost:8080/employee.
package com.javainuse.controllers;
import java.io.IOException;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
public class ConsumerControllerClient {
public void getEmployee() throws RestClientException, IOException {
String baseUrl = "http://producer:8080/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}
private static HttpEntity<?> getHeaders() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
return new HttpEntity<>(headers);
}
}
The docker file is as follows-
From openjdk:8
copy ./target/employee-consumer-0.0.1-SNAPSHOT.jar employee-consumer-0.0.1-SNAPSHOT.jar
CMD ["java","-jar","employee-consumer-0.0.1-SNAPSHOT.jar"]
![docker-dockerhub](static/docker-dockerhub.jpg)
Open the terminal and go to the Spring Boot employee consumer project folder.
Next we will build an image with the name consumer.
docker image build -t employee-consumer .
![docker-consumer-build](static/docker-consumer-build.jpg)
Next we will run the above image as a container named consumer.
docker container run --name consumer -d employee-consumer
![docker-consumer-run](static/docker-consumer-run.jpg)
Next check the logs using
docker container logs consumer
![docker-consumer-logs](static/docker-consumer-logs.jpg)
Here we can see that the container named consumer is not able to communicate with the container named producer.
![docker-consumer-not-communicate](static/docker-consumer-not-communicate.jpg)
So we are getting a null pointer exception.
Inter Docker Container Communication Using Docker Networking
We will be using Docker Networking to allow multiple containers to interact with each other.
![docker-networking-tutorial](static/docker-networking-tutorial.jpg)
We will need to create our own network and add both the employee-producer and employee-consumer services to it.
We will stop and remove the existing docker containers named consumer and producer.
Lets first check the available networks
docker network ls
![docker-network-list](static/docker-network-list.jpg)
Next we will create our own network will be of type bridge
docker network create consumer-producer
![docker-create-network](static/docker-create-network.jpg)
Lets start the employee producer container on the newly created network.
docker container run --network consumer-producer --name producer -p 8080:8080 -d employee-producer
![docker-create-network-producer](static/docker-create-network-producer.jpg)
Lets start the employee consumer+ container on the newly created network.
docker container run --network consumer-producer --name consumer -d employee-consumer
Lets check the consumer container logs-
docker container logs consumer
Download Source Code
Download it -
Employee Consumer Docker Networking Module
Download it -
Employee Producer Docker Networking Module