带有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://www.javacodegeeks.com/2020/03/docker-compose-for-spring-boot-application-with-postgresql.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值