Dockerizing Spring应用程序

我有一个使用Spring框架+ AngularJs前端工作的应用程序。 我以前只需将mvn package到.war文件中,就可以将其部署到亚马逊AWS上。

现在我需要在docker中设置一个linux env来debugging一些额外的function(使用windows作为主操作系统),最好在将来部署这个docker容器。

我看过一些关于Docker化Spring Boot应用程序的文章。

这是spring.io的示例dockerfile

 FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD gs-spring-boot-docker-0.1.0.jar app.jar RUN sh -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 

我的问题是 – 如何在Docker容器上运行我的.war文件

如果您想在本地Linux机器上运行此应用程序,则可以在WAR文件所在的同一目录中创build此Dockerfile。

  FROM tomcat:8.0.21-jre8 RUN [“rm”, “-rf”, “/usr/local/tomcat/webapps/ROOT”] COPY dbconnect.war /usr/local/tomcat/webapps/ROOT.war CMD [“catalina.sh”, “run”] 

然后,您可以构buildDocker镜像并提供自定义标记:

  docker build -t <your-username>/tomcat-example:latest . 

最后你可以运行这个容器。

  docker run -p 8080:8080 -d --name tomcat <your-username>/tomcat-example:latest 

如果需要使用数据库或Web服务器运行此应用程序,可以在这里查看这些详细示例。

https://github.com/dchqinc/dchq-docker-java-example

https://dzone.com/refcardz/java-containerization

你不要在Docker中部署一个.war文件,就像将其部署到tomcat服务器一样。 你需要有一个main(String args[])入口点,这个入口点也是在你的jar清单文件中指定的。 你的app.jar指定为ENTRYPOINT然后运行你的main() 。 在main()里面,你可以运行一个运行你的应用程序的embedded式web服务器。

如果您将Spring Boot应用程序configuration为可执行文件.jar而不是.war(如果您select.jar选项,Spring Boot Initializr会为您执行此操作),那么在您的容器中运行它就是添join口点使用-jar和你的jar名称来运行java

ENTRYPOINT [“java”,“-jar”,“/opt/yourapp-0.0.1-SNAPSHOT.jar”]