我有一个spring boot项目,并试图在circleci持续集成服务器上使用Docker文件构建项目。
问题是我的github repo中只有我的源代码;没有目标目录或jar文件。我的Dockerfile无法获得最终的工件(将应用程序打包到jar中)。
请检查Docker文件并提出建议。
FROM java:8
EXPOSE 8090
VOLUME /tmp
ADD target/spring-boot-rest-0.3.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container","-jar","/app.jar"]
答案 0 :(得分:1)
首先,您需要使用Maven,Gradle等构建应用程序。这将在目标目录中生成一个Jar文件。
示例:
mvn clean package
接下来,您将构建Docker镜像,该镜像将使用上一步中生成的Jar文件。确保您在Jar文件中指定的路径与Dockerfile的位置相关( 这很重要! )
示例:
docker build -t example-company/example-image .
如果您仍然遇到问题,请分享任何错误日志或GitHub回购链接。
答案 1 :(得分:1)
你需要以某种方式打包一个jar来构建你的docker镜像。
您可以在dockerfile中安装maven,并在构建容器时构建项目。这相当于自动化其他答案中描述的步骤。
下面的示例假设您的java源代码位于/ code目录中,而您的maven包目标生成一个名为target / spring-boot-rest-0.3.0.jar的jar:
FROM java:8
EXPOSE 8090
VOLUME /tmp
WORKDIR /code
RUN apt-get update
RUN apt-get install -y maven
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]
# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]
ADD target/spring-boot-rest-0.3.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container","-jar","/app.jar"]
然而,这似乎并不是大多数java人的做法(尽管这是你如何容纳节点或python应用程序)。
人们似乎用maven构建了docker图像。 circl.ci支持maven构建,所以你可能应该这样做。这是我使用的插件。有一堆:
https://github.com/spotify/docker-maven-plugin/blob/master/README.md
配置好pom.xml文件后,您将指示Circl.ci使用如下命令创建docker文件:
mvn clean package docker:build
该过程将与您使用的任何插件类似。