这个问题可能有点傻,但我在这里学习docker,并尝试设置一个多应用docker环境作为培训。但是我想知道它实际上如何与不同的web服务一起工作。
例如:
应用程序 1 在 ROR 上运行
应用程序 2 在 LAMP 和 Mysql 上运行
应用程序 3 使用 python
应用程序 4 也需要 mysql
应用程序 5 使用 Go 和 NodeJS
那实际上如何集成?如果两个应用程序使用相同的数据库(在本例中为 mysql),最好是:
- 直接在服务器上安装 mysql ?
- 直接在每个应用程序容器中安装 mysql ?(将内存加倍)
- 在其自己的容器上安装 mysql 并将应用程序链接到 mysql 容器?
答案1
虽然有许多容器确实运行多个进程,但 docker(以及一般的容器)的基本思想是它们运行每个容器一个进程。
这将排除在每个应用程序上安装 mysql。
对于另外两个选项,答案(当然)是视情况而定。
总的来说,如果你想最大限度地利用容器化应用程序,我相信最佳实践建议你应该容器化你的mysql。这有两个基本原因:
- 它允许您将 mysql 与应用程序的其余部分一起扩展(并且,相关地,允许您限制 mysql 实例以满足应用程序的要求)
- 您没有提到所有这些应用程序是否相关,但如果它们不相关,您通常会想从应用程序的角度来考虑扩展,而不是从整体基础设施的角度来考虑(即应用程序 1 可能需要更大的 DB,或者更多的 DB RAM,或者其他什么,但这并不意味着应用程序 2、3 和 4 也需要)。
你可能会发现检查docker的示例应用程序概述,你可能还想研究 Kubernetes 的方法和生命周期管理(例如参见https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-intro/)。
在实际集成方面,还有另一个线索 - docker 已经弃用--link
(在某种程度上),转而使用用户定义的网络(例如,用于将应用程序彼此隔离)和别名 - 请参阅网络链接以获得对新的基于网络的方法的快速解释和进一步链接,以及使用他们现在称为“传统链接”的方法。
用户网络(按照定义)是灵活的,但建议的一个用例是每个应用程序有一个网络 - 这表明在应用程序之间共享数据库(或任何组件)不是首选方法 - 但我可能是在解释,并且有偏见。
没有人说你需要遵守这些,但花点时间回顾一下 Docker 打算如何使用他们的工具是值得的。随着时间的推移,这种情况已经发生了变化,根据你读过的材料,你可能会遇到与以前如何做到这一点相关的文档(这往往涉及相当多的链接)。