docker图像是否与代码捆绑在一起?

我们正在构build一个SaaS应用程序。 我没有(现在 – 对于这个应用程序)可用性的高要求。 它主要是在特定的时区使用,仅用于商业目的,所以按计划在早上3点重新启动应该不是什么问题。

这是一个运行在fastcgi服务器的单声道的ASP.NET应用程序。 由于安全原因,每个客户都会部署自己的应用程序。 这将使用Docker容器来完成,在前面的一个Nginx服务器上,根据URL分配请求。 如何部署它的可能方式是我的:

  1. 只用fcgi服务器创builddocker镜像,并从挂载点运行代码
  2. 用fcgi服务器和代码创build一个docker镜像

看起来好像是

  • 更新代码更容易,因为docker容器可以继续运行
  • configuration可以与代码捆绑在一起
  • 我可以很容易(如果我想要)为特定的客户添加小的变化

看起来好像2

  • 一切都在一个图像中,不需要乱用额外的文件,只需将其拉出并运行即可

缺点1。

  • 除了正在运行的容器外,还有很多客户的文件夹

缺点2。

  • configuration不能在图像(或可以吗? – 我应该创build具体的图像,每个客户的configuration?)=>还为每个客户额外的文件
  • 更新一个容器比较困难,因为我需要重新启动它 – 但是一开始就说过了,但并不是什么大事

现在 – 第一年 – 客户数量less,需求低时,任何解决scheme都足够好。 我正在看 – 与100多个客户合作的是什么?

也为了将来我想为这个项目设置CI,所以我们不需要手动更新所有的客户实例。 Docker镜像可以有自动构build,但是不能确定就足够了。

我的担忧基本上是 – 哪个解决scheme不那么混乱,可能更容易自动化?

我找不到任何Docker的最佳实践,它涵盖了类似的情况。

很可能您的应用程序的依赖关系将依赖于代码,所以您仍然必须重新生成映像并重新启动容器(无论何时添加新的依赖项)。

这意味着您将有两个升级工作stream程:

  • 一个你只更新代码的地方(当没有依赖性改变的时候)
  • 在那里你也更新图像,并重新启动容器(当依赖性发生变化时)

这很可能是不可取的,因为很难自动化。

所以,我会build议捆绑在图像上的代码。

你一定要确保你的应用程序的configuration可以存储在别的地方,但是(例如在一个卷上,或者通过环境variables来访问)。


最终,Docker是打包,部署和运行应用程序的平台 ,因此打包应用程序(即将代码捆绑在图像上)似乎是更好的使用方法。