web-applications - docker : How To Dockerize And Deploy multiple instances of a LAMP Application

标签 web-applications web-deployment lamp docker

我需要部署同一个 LAMP(或 LEMP)应用程序的多个实例:

  • 每个实例都可以从一个子域访问,带有前端负载均衡器/代理
  • 每个实例都必须有自己的数据库数据和文件数据。
  • 每个实例都可能受到监控
  • 可能会为每个应用实例设置内存限制/cpu
  • 轻松自动部署新的 webapp 实例
  • 环境可能很容易重现以进行测试和开发。

申请要求:

  • dameon 进程(NginxMariaDBPHPFPM)
  • 二进制文件(composerbower、...)
  • 其他系统特定的库和配置

在阅读了 Docker 文档和许多操作指南后,我看到了 dockerize 这个 Web 应用程序的不同解决方案:


解决方案 1:使用一体式容器

所有堆栈都在一个容器中:

  • webapp 源文件、EMP 守护进程、二进制文件……
  • mysql 和 webapp 数据文件安装的卷

示例:

优点(恕我直言):

  • 似乎很容易自动化部署、监控、销毁……。
  • 易于在生产、测试​​和开发环境中使用。

缺点(恕我直言):

  • 单片
  • 难以扩展
  • 没有使用 Docker 的全部力量

解决方案 2:每个 webapp 实例使用一个容器堆栈

为每个要部署的 webapp 部署一个容器堆栈:

  • 每个进程一个容器:NginxMysqlPHP-FPM
  • 二进制容器(composerbower、...)也可以docker化,或者合并到phpfpm容器中
  • 装载 mysql 和 webapp 数据文件的卷

示例:

专业版(恕我直言):

  • 解耦
  • 每个实例隔离的进程
  • 每个容器一个进程,不需要守护进程管理器作为 RUnit 或 主管

缺点(恕我直言):

  • 工作似乎更复杂
  • 很难维护,要查看所有容器状态、链接、版本的“大图”...

解决方案 3:混合之前的 2 个解决方案

  • 一个“app”容器,包含:app src 文件、nginx、phpfmp、composer、git..
  • db mysql 的一个容器,可以与应用容器共享也可以不共享

我更多的是 Dev 而不是 Ops,这对我来说也很困惑。

所以,问题:

  1. 在这些解决方案之间进行选择时,需要考虑哪些标准和优缺点
  2. 如果我选择解决方案 2,如何管理所有容器堆栈,以获得所有容器状态、链接、版本的“大图”...?
  3. App src 文件 (PHP) 可以构建在容器中或作为卷安装,例如。/var/www ?

最佳答案

我最近对 ​​Docker 进行了此类设置的分析。我知道有些人将 Docker 视为一种 MicroVM,但我认为 Docker 的理念更倾向于每个容器的单个进程。这与编程中的单一职责原则非常吻合。 Docker 容器做的越多,可重用性越低,管理起来就越困难。我在这里发表了我所有的想法:

http://software.danielwatrous.com/a-review-of-docker/

然后我继续使用 Docker 构建 LEMP 堆栈。我没有发现将 PHP 和 Nginx 进程拆分到单独的 Docker 容器中的值(value)不大,但是 Web 和数据库函数位于单独的容器中。我还展示了如何管理链接和卷共享以避免在容器中运行 SSH 守护程序。您可以按照我在此处所做的作为引用。

http://software.danielwatrous.com/use-docker-to-build-a-lemp-stack-buildfile/

关于每个容器的单个功能增加复杂性的观点,你是对的。它的外观和感觉就像您拥有不同的分布式层一样。大型应用程序多年来一直这样做,并且在通信、安全和管理方面确实增加了复杂性。当然,它也带来了许多好处。

关于web-applications - docker : How To Dockerize And Deploy multiple instances of a LAMP Application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24928772/

相关文章:

java - 你能直接从 eclipse 发布 .war 到 web 服务器吗

javascript - 如何构造javascript文件?

javascript - 构建并部署到 Firebase 后动画停止工作

java - 使用第三方依赖项部署 Java Web Applet

Windows - 在 CentOS 上运行的 LAMP

web-applications - Google Web Toolkit 2 的隐藏功能

python - flask : "from app import app"?

javascript - 模态不显示在 vue.js 中

sql - LAMP 与 Hudson : How to run SQL Statement every hour

javascript - 使用 javascript 在服务器上移动文件