试图了解 docker 如何在可扩展的 symfony 应用程序的生产中工作

Trying to understand how docker works in production for a scalable symfony application

我正在尝试了解 docker 如何在可扩展的 symfony 应用程序的生产环境中工作。 假设我们从基本的 LAMP 堆栈开始:

根据我的研究,一旦创建了容器,我们就会将它们推送到注册表 (docker 注册表)。 对于生产,编排器将负责创建 PODS(在 kubernetes 的情况下)并将调用我们已上传到注册表的图像。

我没看错吧?我们是否在注册表中推送 3 个单独的图像?

让我澄清几件事:

push them to the registry (docker registry)

可以 将它们推送到 docker 注册表,但是,根据您的公司政策,这可能是不允许的,因为 dockerhub (docker's registry) 托管在互联网的某个地方,而不是在您的公司。 出于这个原因,许多企业部署了自己的注册表,例如 JFrog's artifactory

For production, the orchestrator will take care of creating the PODS (in the case of kubernetes)

好吧,您必须告诉编排器他需要创建什么,如果是 Kubernetes,您将需要编写一个 YAML 文件来描述您想要的内容,然后将负责创作。

并且拥有编排器不仅适用于生产。理想情况下,您希望拥有一个尽可能类似于您的生产环境的暂存环境。

will call the images that we have uploaded to the registry

这可能需要配置。如上所述,dockerhub 不是唯一的注册表,但最后您需要确保可以以某种方式连接到注册表以提取您推送的图像。

Do we push 3 separate images on the registry?

你可以这样做,但是,我不建议你这样做。 尽管容器可能已经变得很好,但它们也有缺点。 它们最大的缺点之一仍然是有状态应用程序 (read up on this article to understand the difference between stateful vs stateless)。 尽管可以在容器中包含有状态应用程序(例如 MySQL)并使用 Kubernetes 之类的东西对其进行编排,但不建议这样做。 容器应该是短暂的,例如,它不适用于数据库。 出于这个原因,我不建议将您的数据库放在容器中,而是使用虚拟机甚至物理机。

关于 PHP 和 Apache: 您 可能 有 2 张单独的图像用于这两个图像,但老实说,这不值得付出努力,因为有些图像已经将它们组合在一起。 official PHP image has versions that include Apache,更好地利用它并节省一些维护工作。

最后我想说的是,您不能简单地从 virtual/physical 服务器中获取所有内容,将其放入容器中并期望它像以前一样工作。