├── Dockerfile ├── README.md ├── pom.xml └── src ├── main ├── java │ └── com │ │ └── javatechie │ │ └── docker │ │ └── compose │ │ ├── SpringbootMongodbDockerApplication.java │ │ ├── dao │ │ └── BookRepository.java │ │ └── model │ │ └── Book.java └── resources │ ├── application.properties │ ├── application.yml │ └── docker-compose.yml └── test └── java └── com └── javatechie └── docker └── compose └── SpringbootMongodbDockerApplicationTests.java /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8 2 | ADD target/springboot-mongo-docker.jar app.jar 3 | ENTRYPOINT ["java","-jar","app.jar"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # springboot-mongodb-docker 2 | Deploying Spring Boot and MongoDB as Containers Using Docker and Docker Compose 3 | 4 | **Steps & Commands** 5 | 6 | - [x] pull mongo image from docker hub **`docker pull mongo:latest`** 7 | - [x] run mongo image **`docker run -d -p 27017:27017 --name javatechiemongodb mongo:latest`** 8 | - [x] dockerize spring boot application **`docker build -t springboot-mongodb:1.0 .`** 9 | - [x] run spring boot docker image and link that container to mongo container 10 | **`docker run -p 8080:8080 --name springboot-mongodb --link javatechiemongodb:mongo -d springboot-mongodb:1.0`** 11 | - [x] check docker running containers **`docker ps`** it should display two container ids 12 | - [x] check logs of spring boot image **`docker logs springboot-mongodb`** 13 | - [x] if all good access your api :tada: 14 | ```bash 15 | curl --location --request POST 'http://localhost:8080/books' \ 16 | --header 'Content-Type: application/json' \ 17 | --data-raw '{ 18 | "id":1, 19 | "bookName":"corejava", 20 | "authorName":"Basant" 21 | }' 22 | ``` 23 | - [x] login to mongo terminal to verify records **`docker exec -it javatechiemongodb bash`** 24 | - type mongo and enter 25 | - show dbs 26 | - use book 27 | - show collections 28 | - db.book.find().pretty() 29 | 30 | **Use Docker Compose** 31 | 32 | - [x] Kill running container: 33 | ``` 34 | docker rm 35 | ``` 36 | 37 | #### docker-compose.yml 38 | 39 | ```yaml 40 | version: "3" 41 | services: 42 | javatechiemongodb: 43 | image: mongo:latest 44 | container_name: "javatechiemongodb" 45 | ports: 46 | - 27017:27017 47 | springboot-mongodb: 48 | image: springboot-mongodb:1.0 49 | container_name: springboot-mongodb 50 | ports: 51 | - 8080:8080 52 | links: 53 | - javatechiemongodb 54 | ``` 55 | - [x] navigate to resources folder: 56 | ``` 57 | springboot-mongo-docker/src/main/resources and run docker-compose up 58 | ``` 59 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.5.4 9 | 10 | 11 | com.javatechie 12 | springboot-mongodb-docker 13 | 0.0.1-SNAPSHOT 14 | springboot-mongodb-docker 15 | Demo project for Spring Boot 16 | 17 | 1.8 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter-data-mongodb 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-web 27 | 28 | 29 | 30 | org.projectlombok 31 | lombok 32 | true 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-test 37 | test 38 | 39 | 40 | 41 | 42 | 43 | 44 | org.springframework.boot 45 | spring-boot-maven-plugin 46 | 47 | 48 | 49 | org.projectlombok 50 | lombok 51 | 52 | 53 | 54 | 55 | 56 | springboot-mongo-docker 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/docker/compose/SpringbootMongodbDockerApplication.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.docker.compose; 2 | 3 | import com.javatechie.docker.compose.dao.BookRepository; 4 | import com.javatechie.docker.compose.model.Book; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.SpringApplication; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | import org.springframework.web.bind.annotation.*; 9 | 10 | import java.util.List; 11 | 12 | @SpringBootApplication 13 | @RestController 14 | @RequestMapping("/book") 15 | public class SpringbootMongodbDockerApplication { 16 | 17 | @Autowired 18 | private BookRepository repository; 19 | 20 | @PostMapping 21 | public Book saveBook(@RequestBody Book book){ 22 | return repository.save(book); 23 | } 24 | 25 | @GetMapping 26 | public List getBooks(){ 27 | return repository.findAll(); 28 | } 29 | 30 | public static void main(String[] args) { 31 | SpringApplication.run(SpringbootMongodbDockerApplication.class, args); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/docker/compose/dao/BookRepository.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.docker.compose.dao; 2 | 3 | import com.javatechie.docker.compose.model.Book; 4 | import org.springframework.data.mongodb.repository.MongoRepository; 5 | 6 | public interface BookRepository extends MongoRepository { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/docker/compose/model/Book.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.docker.compose.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.data.annotation.Id; 7 | import org.springframework.data.mongodb.core.mapping.Document; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Document(collection = "books") 13 | public class Book { 14 | @Id 15 | private int id; 16 | private String name; 17 | private String authorName; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | data: 3 | mongodb: 4 | database: Book 5 | host: javatechiemongodb 6 | port: 27017 -------------------------------------------------------------------------------- /src/main/resources/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | javatechiemongodb: 4 | image: mongo:latest 5 | container_name: "javatechiemongodb" 6 | ports: 7 | - 27017:27017 8 | springboot-mongodb: 9 | image: springboot-mongodb:1.0 10 | container_name: springboot-mongodb 11 | ports: 12 | - 8080:8080 13 | links: 14 | - javatechiemongodb -------------------------------------------------------------------------------- /src/test/java/com/javatechie/docker/compose/SpringbootMongodbDockerApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.docker.compose; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class SpringbootMongodbDockerApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | --------------------------------------------------------------------------------