如何构建结合了 Angular 和 Spring Boot 应用程序的 Docker 映像?

Posted

技术标签:

【中文标题】如何构建结合了 Angular 和 Spring Boot 应用程序的 Docker 映像?【英文标题】:How to build docker image which combines angular and spring boot app? 【发布时间】:2019-07-31 12:53:45 【问题描述】:

我有两个不同的项目 spring boot 和 angular 项目。现在我想构建包含这两个项目的 docker 镜像。 我检查了maven-resource-plugin,它将角度文件复制到spring-boot /target/classes/resources directory。 还有docker-maven-plugin,它从spring-boot-app构建docker镜像。

我应该使用两个插件的输出来创建所需的输出,还是应该更改创建 docker 映像的方式? 现在我的 docker 镜像是从 spring boot 应用程序构建的镜像。

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

【问题讨论】:

有什么理由同时部署到同一个容器?我建议通过创建两个不同的图像来部署到不同的容器 好吧,这个 webapp 会很少使用,比如一个月左右一次,我不想为此一直保持单独的 Ui 容器。 【参考方案1】:

您可以将 webpack 生成的 wwwroot 托管为 Spring Boot 应用程序提供的静态文件。

而不是通过执行ng serve 在 webpack-dev 上运行您的 Angular 应用程序,您应该通过ng build --prod 生成静态文件(我可能拼错了一些命令,从内存中写入)并将它们作为静态文件放置在 spring boot 应用程序中,如图所示这里https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot

我不是弹簧专家,但你可以像你说的那样做。当然,拥有一个只有前端的单独容器会很好,但是如果您的 spring 应用程序将与前端紧密绑定并且不会为其他服务提供 api,您可以在 spring boot 服务器上使用解决方案托管 angular。

最后,您只是将 html、js 和 css 文件发送到客户端的浏览器,并在其中执行代码,因此托管静态文件不会成为负担。

如果您只想扩展后端服务以处理更大的流量,那么将 api 与前端内容服务服务(即 nginx、httpd)分离是合理的,但我认为这里并非如此。

【讨论】:

以上是关于如何构建结合了 Angular 和 Spring Boot 应用程序的 Docker 映像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Angular 7 和 Spring Boot 构建的 Web 应用程序中使浏览器缓存无效

Angular 和 Spring Boot:使它们有效协同工作的配置

Spring Boot + Angular 应用程序工作

如何使用 Angular 消除 Spring Boot 中的 CORS 错误? [复制]

angular1结合webpack构建工具

如何结合护照和angular-ui路由