当前位置: 首页 > 知识库问答 >
问题:

Docker:如何对接和部署LAMP应用程序的多个实例

宗政安歌
2023-03-14

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

  • 每个实例都可以通过前端LoadBalancer/Proxy
  • 从子域访问
  • 每个实例必须有自己的db数据和文件数据。
  • 可以监视每个实例
  • 可以为每个应用程序实例设置内存限制/cpu
  • 易于自动部署新webapp实例
  • 环境可以很容易地进行测试和开发。

应用程序要求:

    null
    null

示例

>

  • tutum为Wordpress应用程序提供了一个多功能容器:https://github.com/tutumcloud/tutum-docker-wordpress
  • Phusi提供针对Docker优化的基本映像,在文档(https://github.com/phusion/baseimage-docker#docker_single_process):

    Docker可以在容器中运行多个进程。事实上,没有技术上的理由让您将自己限制在一个进程中

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

    反对意见(IMHO):

    • 单芯片
    • 难以缩放
    • 没有使用Docker
      null
      null

    专业(IMHO):

    • 已解耦
    • 每个实例隔离的进程
    • 每个容器一个进程,不需要后台进程管理器作为RUnit或supervisord

    反对意见(IMHO):

      null
      null
    1. 在这些解决方案之间进行选择时,需要考虑的标准和利弊是什么?
    2. 如何管理所有容器堆栈如果我选择解决方案2,有一个“大图片”的所有容器状态,链接,版本...?
    3. 应用程序src文件(PHP)可能构建在容器中或装入卷,例如。/var/www?
  • 共有1个答案

    魏煜祺
    2023-03-14

    我最近在Docker上分析了这种类型的设置。我知道有些人把Docker看作是一种MicroVM,但我认为Docker的哲学更倾向于每个容器的单个进程。这与方案编制中的单一责任原则很好地吻合。Docker容器的功能越多,可重用性就越低,管理也就越困难。我把所有的想法都贴在这里了:

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

    然后我继续使用Docker构建一个LEMP堆栈。我没有发现将PHP和Nginx进程拆分为单独的Docker容器有多大价值,但Web和数据库功能都在单独的容器中。我还展示了如何管理链接和卷共享,以避免在容器中运行SSH守护进程。你可以把我在这里所做的作为一个参照点。

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

    对于您关于每个容器的单个函数的复杂性增加的观点,您是正确的。它的外观和感觉就像您拥有不同的分布式层一样。很多年来,大型应用程序已经做到了这一点,而且当涉及到通信、安全和管理时,它确实增加了复杂性。当然,它也带来了许多好处。

     类似资料:
    • 问题内容: 我需要部署同一LAMP(或LEMP)应用程序的许多实例: 每个实例都可以使用前端负载均衡器/代理从一个子域访问 每个实例必须具有自己的数据库数据和文件数据。 每个实例都可能受到监视 内存限制/ CPU可能会针对每个应用实例设置 易于自动化新的Webapp实例的部署 测试和开发环境可能很容易重现。 申请要求: dameon过程(,,) 二进制文件(,,…) 其他系统特定的库和配置 阅读D

    • 这是我的Compose.yml 我遇到一些问题,当发送消息到服务器时,server1显示连接,并显示GET消息,但下次发送时,server2显示GET消息 如何使其成为“我连接的服务器就是我发送消息到的服务器”?

    • 我想第一次使用docker发布我在spring boot中制作的应用程序。然而,在发布时出现了一个问题。 因此,我上传到conter的图像不显示。 以下是我采取的步骤,我将立即添加我使用gradle的步骤。 > 我将Docker插件下载到IntelliJ 我创建了一个Dockerfile,其中我放了: 音量 /tmp ARG JAR_文件 在终端中,我键入以下命令来构建项目: chmod 777

    • 我正在研究Terraform以及如何使用它来设置AWS环境。到目前为止,我已经有了用3个公共子网、3个私有子网、一个互联网网关和3个Nat网关设置VPC的脚本。然而,我对如何在私有子网中部署和重新部署应用程序感到困惑? 在我的场景中,我们使用Spring Boot构建微服务。我们的想法是转移到一种状态,在这种状态下,我们可以将弹性负载平衡器连接到公共子网,并在私有子网中的自动缩放组中承载我们的应用

    • 我想部署两个应用程序foo。war和条形图。war到同一个Tomcat实例。他们是否可以侦听不同端口上的连接,例如,foo侦听端口81,bar侦听端口82?如果是,我如何配置?我意识到应用程序没有必要监听不同的端口,但这正是我想要实现的。 此外,如果我将重命名为,使其在根上下文中运行,那么对该Tomcat实例的所有请求都将由foo应用程序处理,因此bar必须部署到单独的Tomcat实例,这是否正确

    • 问题内容: JAX-RS 1.1规范在第6页上说: 如果不存在Application子类,则必须将添加的servlet命名为: 添加的servlet是什么?可以是任意servlet吗? 如果存在Application子类,并且已经定义了一个servlet,该servlet的servlet初始化参数为: 同样,这里的“ servlet”是什么? 如果存在不由现有Servlet处理的Applicati