在同一台docker-machine中的多个docker容器之间共享PHP OPcache

时间:2019-09-22 08:28:04

标签: php docker docker-compose docker-swarm opcache

我正在对laravel堆栈应用程序进行docker化。

我有一个名为app的服务,该服务正在运行php-fpm,并且其中包含laravel源代码。
我想复制此服务,以便可以从高可用性和零停机功能中受益。

我不知道如何处理OPcache:

  1. 我应该在每个app容器中运行opache优化吗?如果这样,这种方法会保留大量服务器的内存
  2. 是否可以在同一台docker机器上的app服务的任务(容器)之间共享opcache?
  3. 假设这是可能的,这种方法是否可以纠正此类问题或将其视为反模式?

1 个答案:

答案 0 :(得分:1)

  

无论何时编译脚本,该过程都会检查PHP OPcode   缓存并在共享内存中找到已经编译的代码。如果   找不到代码,自动启动编译并保存   到内存之后生成输出。

enter image description here

integrate-php-opcache

现在我们可以根据上述Opcache流程讨论您的问题

  

我应该在每个应用程序容器中运行opcache优化吗?如果是这样   这种方法可保留大量服务器内存

是的,您应该在每个容器中运行OpCache,因为每个容器都在其自己的空间上运行,第二件事将节省大量的容器内存,否则,如果没有OpCache,您的容器将在繁重的负载下无法响应。

Both tests reported about 50% decrease in response time after installing OpCache.

opcache-configuration-to-avoid-caching-suprises

  

是否有任何方法可以在应用程序的任务(容器)之间共享opcache   服务在同一台docker机器上?

首先,一个容器没有高特权就无法访问另一个容器的内存,并且这需要额外的配置;第二件事应该避免这样做,容器被设计为独立运行,并且每个容器管理一个进程(规则的拇指)。

  

假设这是可能的,这种方法是否可以纠正这种情况?   问题还是被视为反模式?

不,在Docker容器中不建议使用,应将容器解耦。

  

通常,解耦架构是用于复杂工作的框架   允许组件完全自治且不了解   彼此。有时据说云计算已脱钩   架构,因为云提供商管理物理   基础架构,而不是托管在其上的应用程序或数据。