如何在每次运行compose时重新部署我的jar并将其放入docker映像中



所以我知道有很多关于docker和maven主题的教程,但我在将它们组合在一起时遇到了一些困惑。

我创建了一个多模块Maven项目,其中有2个模块,2个spring应用程序,我们称它们为应用程序1和应用程序2。

通过IntelliJ IDEA绿色"相互启动;运行";按钮工作得很好,现在我想让事情自动化,并通过docker运行。

我有两种情况下看起来相同的Dockerfiles:(在两个模块中是相同的,只是JAR名称不同(

FROM adoptopenjdk:11-jre-hotspot
MAINTAINER *my name here lol*
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /wait
RUN chmod +x /wait
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application1-0.0.1-SNAPSHOT-jar-with-dependencies.jar
ENTRYPOINT ["java","-jar","/application1-0.0.1-SNAPSHOT-jar-with-dependencies.jar"]
CMD /wait && /*.jar

我也有docker组成:

version: '2.1'
services:
application1:
container_name: app1
build:
context: ../app1
image: docker.io/myname/app1:latest
hostname: app1
ports:
- "8080:8080"
networks:
- spring-cloud-network-app1
application2:
container_name: app2
build:
context: ../app2
depends_on:
application1:
condition: service_started
links:
- application1
image: docker.io/myname/app2:latest
environment:
WAIT_HOSTS: application1:8080
ports:
- "8070:8070"
networks:
- spring-cloud-network-app2
networks:
spring-cloud-network-app1:
driver: bridge
spring-cloud-network-app2:
driver: bridge

我目前所做的是:

  • 我为每个模块运行maven包,并接收类似";application1(-2(-0.0.1-SNAPSHOT-jar-with-dependences.jar";在两个目标文件夹中
  • "docker build-t springio/app1">
  • "docker comp-up-build

它很有效,但我觉得我需要做一些额外的步骤。我该如何做这个项目,这样我就只需要运行docker compose了?(每次我更改代码后(

再说一遍,我知道这是一件很简单的事情,但我有点失去了逻辑。

谢谢!

第S页啊,关于";。。。docker compose-wait/releases/download/2.90/wait/wait";重要的是,应用程序一个接一个地启动,尝试不同的解决方案,不幸的是,并没有像我想的那样好用。但我想我会顺其自然。

所以,如果有人想知道如何做我问的事情,答案是:你需要多阶段构建Dockerfile。它看起来是这样的:

#
# Build stage
#
FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package
#
# Package stage
#
FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/demo-0.0.1-SNAPSHOT.jar /usr/local/lib/demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/demo.jar"]

它所做的基本上是首先创建一个jar文件,将其复制到包阶段并最终运行。这允许你只运行docker compose,就可以在docker中运行你的应用程序。

最新更新