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

share PHP OPcache between multiple docker containers in the same docker-machine

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

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

不知如何处理OPcache:

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

Whenever the script compiles, the process checks the PHP OPcode caching and finds the already compiled code on shared memory. If the code is not found, initiates the compilation automatically and saves that to the memory generating output after that.

integrate-php-opcache

所以现在我们可以根据上面的Opcache流程来讨论你的问题

should i run opcache optimize in every app container? if so this approach reserves plenty of server's memory

是的,你应该 运行 每个容器中的 OpCache 作为每个容器 运行 自己 space,第二件事它将节省大量的容器内存,否则没有 OpCache 你的容器负载过大会无法响应

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

opcache-configuration-to-avoid-caching-suprises

Is there any way to share opcache between tasks(containers) of app service on the same docker machine ?

第一件事,一个容器在没有高权限的情况下不能访问另一个容器的内存,为此你需要额外的配置,第二件事应该避免这样做,容器被设计为 运行 独立并管理一个每个容器一个进程(经验法则)。

assume that's possible , is this approach correct this sort of problems or its considered as anti pattern ?

不,在 Docker 容器中,它不鼓励,应该解耦容器。

In general, a decoupled architecture is a framework for complex work that allows components to remain completely autonomous and unaware of each other. Cloud computing is sometimes said to have a decoupled architecture because the cloud provider manages the physical infrastructure, but not the applications or data hosted on it.