带有PostgreSQL的Docker Compose for Spring Boot应用程序

在此博客文章中,您将学习如何使用PostgreSQL配置Spring Boot应用程序以与Docker Compose一起运行。

这篇博客文章涵盖:

  • Spring Boot应用程序Dockerfile配置,在依赖关系和资源之间进行了清晰的分离
  • 用于通过PostgreSQL运行应用程序的Docker Compose配置

先决条件

  • 码头工人
  • Java 13
  • 终奌站
  • httpie(或curl)

应用

  • 使用Spring WebSpring Data JPASpring Data RESTPostgreSQL JDBC Driver依赖项生成基于Maven的Spring Boot应用PostgreSQL JDBC Driver

可以在Github上找到本文的源代码: https : //github.com/kolorobot/spring-boot-tc

Dockerfile

  • 创建Dockerfile
  • 基本Docker映像使用Alpine Linux:
 FROM openjdk: 13 -alpine 
  • 不要以root身份运行应用程序:
 RUN addgroup -S spring && adduser -S spring -G spring  USER spring:spring 
  • 不要将胖子容器部署到容器中,而是将依赖项,应用程序类和资源拆分到单独的层中:
 ARG DEPENDENCY=target/dependency  COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib  COPY ${DEPENDENCY}/META-INF /app/META-INF  COPY ${DEPENDENCY}/BOOT-INF/classes /app 

注意:如果您有基于Gradle的项目,则可以使用ARG来调整目录: docker build --build-arg DEPENDENCY=build/dependency -t spring-boot-tc .

  • 通过在java命令中指向主类和库,在容器内运行应用程序:
 ENTRYPOINT [ "java" , "-cp" ENTRYPOINT [ "-cp" , "app:app/lib/*" , "pl.codeleak.samples.springboot.tc.SpringBootTestcontainersApplication" ] 

完整的Dockerfile

 FROM openjdk: 13 -alpine  RUN addgroup -S spring && adduser -S spring -G spring  USER spring:spring  ARG DEPENDENCY=target/dependency  COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib  COPY ${DEPENDENCY}/META-INF /app/META-INF  COPY ${DEPENDENCY}/BOOT-INF/classes /app  ENTRYPOINT [ "java" , "-cp" ENTRYPOINT [ "-cp" , "app:app/lib/*" , "pl.codeleak.samples.springboot.tc.SpringBootTestcontainersApplication" ] 

Docker新手? Docker在12分钟内进行了解释: https : //www.youtube.com/watch?v = YFl2mCHdv24

Docker撰写

  • 创建docker-compose.yml
  • 我们将提供两项servicesdb用于PostgreSQL数据库和app用于应用程序
      db服务将使用公共存储库中的postgres映像,它将向主机公开端口5432 ,并将环境属性POSTGRES_*传递给容器以设置数据库名称,用户和密码。

完整docker-compose.yml

 version: '3'  services: 
   db: 
     image: "postgres" 
     ports: 
       - "5432:5432" 
     environment: 
       POSTGRES_DB: tc 
       POSTGRES_USER: tc 
       POSTGRES_PASSWORD: tc 
   app: 
     build: . 
     ports: 
       - "9000:8080" 
     environment: 
       SPRING_DATASOURCE_URL: jdbc:postgresql: //db/tc 
       SPRING_DATASOURCE_USERNAME: tc 
       SPRING_DATASOURCE_PASSWORD: tc 
     depends_on: 
       - db 

Docker Compose的新手? Docker Compose在12分钟内进行了解释: https : //www.youtube.com/watch?v = Qw9zlE3t8Ko

运行应用程序

  • 打包应用程序

$ ./mvnw clean package

要跳过测试,请使用: -DskipTests=true

  • fat-jar提取库

$ mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

  • 使用docker-compose运行

$ docker-compose build && docker-compose up

  • 验证应用程序正在运行并响应请求
 $ http get : 9000 /owners  HTTP/ 1.1 200  Connection: keep-alive  { 
     "_embedded" : { 
         "owners" : [] 
     }, 
     "_links" : { 
         "profile" : { 
             "href" : " http://localhost:8080/profile/owners " 
         }, 
         "self" : { 
             "href" : " http://localhost:8080/owners {?page,size,sort}" , 
             "templated" : true 
         } 
     }, 
     "page" : { 
         "number" : 0 , 
         "size" : 20 , 
         "totalElements" : 0 , 
         "totalPages" : 0 
     }  } 

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/spring-boot-tc

参考文献

  • https://spring.io/guides/gs/spring-boot-docker/
  • https://openliberty.io/blog/2018/06/29/optimizing-spring-boot-apps-for-docker.html

也可以看看

  • 使用JUnit 5进行Spring Boot测试
  • macOS:(Java)开发人员必备工具

翻译自: https://www.javacodegeeks.com/2020/03/docker-compose-for-spring-boot-application-with-postgresql.html

你可能感兴趣的:(带有PostgreSQL的Docker Compose for Spring Boot应用程序)