分离前端应用程序/网络服务器 docker 容器

Separating frontend app / webserver docker container

据我所知,将 Angular 应用程序(或任何前端应用程序)容器化的最常见方法是将已编译的前端应用程序的源代码和网络服务器(即 nginx)打包成一个单一的容器。

如果我们想通过添加重复的容器来横向扩展,每个容器都会有一个网络服务器和源代码资产。

是否可以将这两个组件分成两个单独的容器?这样我们就可以扩展网络服务器,而不需要每个容器都拥有相同源代码资产的副本(一遍又一遍)。

我意识到在大多数用例中,这可能不值得像我建议的那样进行拆分(也不实际)。从教育的角度来看,我主要好奇如何或是否可以做到这一点。此外,当需要扩展的部分是网络服务器时,如果规模很大以尽量减少在每个容器中复制相同的静态资产,这是否是首选?

如果您的浏览器应用程序代码被编译成静态文件,然后构建到一个图像中,您可以 运行 任意数量的基于该图像的容器,它们不会使用任何额外的存储空间。所有容器的临时文件系统都将指向共享的底层映像。

关于容器要记住的重要事情是它包装了单个进程,并且容器的文件系统彼此隔离。在您假设的设置中,拥有一个已编译文件的容器是没有意义的,因为它不会 运行 启动一个进程,而其他容器将无法访问这些文件。

如果您期待像 Kubernetes 这样的集群环境,它们非常擅长将 Docker 图像拉到它们需要的任何地方 运行,但推送要复杂得多”文件”左右。特别是在这些环境中,我看到的两种成功方法是您在此处描述的方法,将前端代码编译成图像,或者从更传统的托管环境(对于静态文件、对象像 Amazon S3 这样的存储效果很好),即使后端 运行 在容器中。