首页 » web服务器

php lumen 挂载本地目录 docker 项目慢的问题

   发表于:web服务器评论 ()   热度:299

背景 : 最近做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项目的运行 速度有所提高, 但还是不太理想 , 后续还得再看看怎么继续处理

 

参考资料

在 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 卷标志是:

  1. consistent或default:具有完全一致性的默认设置,如上所述。
  2. delegated: 容器运行时对挂载的看法是权威的。在容器中所做的更新在主机上可见之前可能会有延迟。 你什么时候用?例如,当容器不断更改数据并且您想在主机上备份此数据时使用它,这是从主机角度来看的只读操作,因此将委派正确的选择。
  3. 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,因此命令不起作用。升级后,一切都按预期工作。

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。