php lumen 挂载本地目录 docker 项目慢的问题
背景 : 最近做php项目 运行环境是 win10 + docker 搭建, 然后挂载 本地目录 , 然后运行php发现很慢, 找了一个解决办法, 在挂载的目录上用 cached
,
docker-compose.yml配置如下
phalcon-php7.2:
image: magichuihui/phalcon-php:7.2-composer
working_dir: /projects
volumes:
- E:/docker-file/conf/php72/docker.conf:/usr/local/etc/php-fpm.d/docker.conf:cached
- E:/wwwroot:/projects:cached
加上 cache
后 lumen项目的运行 速度有所提高, 但还是不太理想 , 后续还得再看看怎么继续处理
参考资料
(。・v・。)在 docker 上使用volumes配置的目的是在主机和 docker 容器之间共享数据,并确保两者之间的数据一致性(a 中发生的事情在 b 中表示,反之亦然)。挂载的卷是容器的“一部分”并且是相关的。常见的用途是在容器和机器的文件系统中存储共享数据备份。如果容器被移除,我们将在容器重新创建时加载卷。
TLDR:
- 使用cached:当主机执行更改时,容器处于只读模式。
- 使用delegated:当 docker 容器执行更改时,主机处于只读模式。
- 用途default:当容器和主机都积极且持续地对数据执行更改时。
- 确保在您的机器上使用更新的 docker-compose 和docker 版本
从文档:
Mac 用于osxfs将从 macOS 共享的目录和文件传播到 Linux VM。这种传播使这些目录和文件可用于在 Docker Desktop for Mac 上运行的 Docker 容器。**默认情况下,这些共享是完全一致的,这意味着每次在 macOS 主机上或通过容器中的挂载发生写入时,更改都会刷新到磁盘,以便共享中的所有参与者都具有完全一致的视图.
在某些情况下,完全一致性会严重影响性能。** Docker 17.05 及更高版本引入了选项,用于在每个挂载、每个容器的基础上调整一致性设置。可以使用以下选项:
该consistency选项(如果存在)可以是consistent、delegated或之一cached。此设置仅适用于 Docker Desktop for Mac,在所有其他平台上被忽略。
Docker 卷标志是:
- consistent或default:具有完全一致性的默认设置,如上所述。
- delegated: 容器运行时对挂载的看法是权威的。在容器中所做的更新在主机上可见之前可能会有延迟。 你什么时候用?例如,当容器不断更改数据并且您想在主机上备份此数据时使用它,这是从主机角度来看的只读操作,因此将委派正确的选择。
- cached: macOS 主机对 mount 的看法是权威的。在主机上进行的更新在容器中可见之前可能会有延迟。你什么时候用?例如,当您的主机不断更改容器服务读取和使用它的数据时(例如配置/源代码/来自服务器的渲染数据等......)
用法:
- <my-first-host-volume>:<first-container-volume-path>:delegated - <my-second-host-volume>:<second-container-volume-path>:cached
示例:
version: '3.4' services: jenkins: image: jenkins/jenkins:lts environment: - JENKINS_HOME=/var/jenkins_home container_name: jenkins volumes: - '~/jenkins/:/var/jenkins_home:delegated' - '~/environment_keys:/var/data:cached' ports: - 0.0.0.0:8080:8080 expose: - 5000 restart: unless-stopped
就我而言,我想要一个readonly( :ro) 卷,它也是:cachedor :delegated。为此,您只需使用以下语法:
volumes: - /external/folder:/internal/folder:ro,cached
我没有运行足够新的(边缘通道)版本的 Docker,因此命令不起作用。升级后,一切都按预期工作。