我通过使用nginx作为基础映像来对我的SPA Web应用程序进行docker化,然后复制我的nginx.conf并生成文件。正如Dockerize Vue.js App所述,我认为许多dockerizing SPA解决方案都是相似的。
如果我不使用docker,我将首先构建SPA代码,然后将构建文件复制到nginx根目录(在安装/设置nginx之后,我几乎不会更改它)
那么对SPA进行docker化有什么好处?
-----更新-----
一个回答说:“如果每次发布新版本的应用程序时都会对应用程序进行docker化,则Nginx服务器将获得所有可用的新更新。”我完全不同意。我不需要最新版本的nginx,毕竟我只使用了nginx的基本功能。我的一些团队成员在进行开发时仅使用与Linux捆绑在一起的nginx版本。如果我的Docker映像使用最新的ngixn,则实际上会创建与开发环境不同的环境。
我意识到我的问题很可能是封闭的,它将被视为基于观点的。但是我已经用谷歌搜索了,找不到满意的答案。
答案 0 :(得分:0)
如果我不使用docker,我将首先构建SPA代码,然后将构建文件复制到nginx根目录(在安装/设置nginx之后,我几乎不会更改它)
这是一个安全问题,请放心,这似乎是有关服务器的事情。
如果您在每次发布新版本的应用程序时都对应用程序进行了docker化,则Nginx服务器将获得所有可用的新更新。
请记住,如果您的应用程序不在每周一次发布新版本,则您需要考虑至少每周重建一次docker映像,以获取更新并保持最新的最新安全补丁程序。
那么对SPA进行docker化有什么好处?
整个开发,阶段和生产过程中的环境相同。在您运行应用程序的所有阶段,这被称为100%奇偶校验,无论您部署哪种类型的应用程序,这都是正确的。
如果某些东西在生产中不起作用,则可以按摘要提取docker映像,然后在本地运行它以进行调试,并尝试了解问题出在哪里。如果您需要SSH到生产服务器,则意味着您的自动化管道失败了,或者甚至没有使用过...
答案 1 :(得分:0)
Webpack之类的工具将Javascript应用程序编译为静态文件,然后可以使用您选择的HTTP服务器来提供这些文件。建立SPA后,建立的文件就无法与index.html
之类的页面与图像文件之类的其他资产进行区分:它们只是由某些HTTP服务器提供服务的静态文件。
Docker容器封装了一个正在运行的进程。本身包含这些静态文件
并不能很好地完成工作。您会经常看到运行面向开发人员的HTTP服务器的“ SPA Docker容器”。不过,这样做没有什么特别的好处。您可以通过在本地开发应用程序,运行npm run build
或创建dist
目录的任何方式,然后以与发布其他资产相同的方式发布,来获得同样良好的开发人员体验。自动化管道在这里很有帮助,但这并不是Docker大大简化的任务。
(还请记住,在执行此操作时,已构建的应用程序在用户的浏览器上运行。这意味着它看不到任何Docker内部的联网设备:它无法使用Docker内部的IP地址,并且可以不要使用内置的Docker DNS服务。到达的所有内容都必须在docker run -p
个发布的端口上,并且必须使用到达主机的DNS名称。浏览器实际上不知道Docker参与了此工作全部。)
答案 2 :(得分:0)
有一些好处。
首先,构建Docker映像意味着您要明确说明应用程序的规范运行时-此版本的nginx,具有SSL配置,无论如何。运行时的更改在源代码控制中,因此您可以以可预测和可逆方式进行升级。您说您不想要“最新版本”-但是如果该最新版本修补了严重的安全漏洞该怎么办?能够在“一次性”容器上进行可预测的升级,意味着您可以在需要时进行升级。
第二,如果整个开发团队使用相同的Docker映像,则可以避免使用不同配置带来的挑战,从而使“它可以在我的机器上工作”对错误做出响应-在SPA中,nginx的不同配置可以导致不同的行为。加入该团队的新开发人员无需安装或配置任何东西,就可以使用他们想要的任何设备-他们可以确定Docker中运行的功能与所有其他开发人员相同。
第三,通过将所有环境容器化(不仅仅是开发,还包括测试和生产),您可以轻松地在管道中移动版本并仅更改特定于环境的值。
现在,对于SPA来说,这些好处是真实的,但可能不超过创建和维护Docker映像的成本和工作量-不可避免地,Docker映像成为瓶颈,人们首先要怪罪。如果您遇到许多特定于环境的痛苦(建议必须有一个一致的运行时环境),或者如果您看到许多“在我的机器上可以工作”的类型的错误,那么我只会投资。