symfony MacOS中的Docker非常慢

brc7rcf0  于 2023-01-26  发布在  Mac
关注(0)|答案(9)|浏览(187)

我有这个docker-compose.yml:

version: "3.1"
services:

    memcached:
      image: memcached:alpine
      container_name: universal-memcached2

    redis:
      image: redis:alpine
      container_name: universal-redis2

    mariadb:
      image: mariadb:10.4
      container_name: universal-mariadb2
      working_dir: /application
      volumes:
        - .:/application
        - "../data/db:/var/lib/mysql" # skasowac
      environment:
        - MYSQL_ROOT_PASSWORD=Haslo
        - MYSQL_DATABASE=sample
        - MYSQL_USER=user
        - MYSQL_PASSWORD=Haslo
      ports:
        - "8083:3306"

    webserver:
      image: nginx:alpine
      container_name: universal-webserver2
      working_dir: /application
      volumes:
          - .:/application
          - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: phpdocker/php-fpm
      container_name: universal-php-fpm2
      working_dir: /application
      volumes:
        - .:/application
        - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini

    volumes:
        generated:
        var:
        static:

    phpmyadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - mariadb
      environment:
        PMA_HOST: mariadb
        PMA_PORT: 3306
      ports:
        - '8081:80'

当我在它上面运行symfony 4中我的最新项目时,它工作得非常慢...:(
我有新的MacOs和Docker桌面。我目前正在学习Symfony和Laravel框架,但这对Docker来说非常慢。它甚至没有在上面工作。
我怎样才能修好它?

q43xntqr

q43xntqr1#

事实上,Docker需要一个普通的Linux内核来运行,但遗憾的是Mac OS和Windows都不能提供,因此Mac OS上有一个客户端来运行Docker,除此之外,Mac OS内核和应用之间还有一个抽象层(Docker容器)和文件系统是不一样的。正因为如此,Docker在Mac OS上运行很慢。你不能像在Linux上那样在Mac OS上运行Docker。
如果我需要给出一些关于真实用例的示例。我有相同的机器。所以,我在Mac OS Mojave上的Docker v18上使用Symfony 4。这是我在Docker上的Symfony总执行时间。(显然,这取决于您的前端和数据库查询,但我试图启发您的主要逻辑。

  • 第一次渲染12000 ms
  • 使用Symfony缓存:344毫秒
  • 使用Docker缓存(:卷的Docker缓存属性):195毫秒

只要我使用没有Docker的Symfony,下面是我的总执行时间。

  • 不使用Docker,使用Symfony缓存:82毫秒

然而,我们可以做一些改进来获得更好的工作空间。例如,您可以使用这样的卷,

volumes:
        - .:/application:cached
gzjq41n4

gzjq41n42#

正如在其他回答中提到的,问题归结为Docker与OSX上的文件系统交互的方式。
我发现了一篇关于如何在OSX上让事情变得更快的文章:
https://vivait.co.uk/labs/docker-for-mac-performance-using-nfs
从本文中可以看出,真实的的解决方案是更改文件系统以使用NFS,但由于我对Docker一无所知(它是在工作中为我设置的),因此我选择使用Docker较新版本中提供的选项
我在docker-compose.yml中的volumes下的所有选项中添加了:delegated。重新启动我的容器后,每个都比以前快了近两倍。虽然没有原生快,但足够快了。
文章示例:

app:
    build:
        context: .
        dockerfile: ./docker/app/Dockerfile
    working_dir: /app
    user: "www-data"
    volumes:
        - ./:/app:delegated
        - ./:/another_folder:delegated

NFS示例相当长,基本上需要复制本文的一半内容,因此我不添加它,但这个:delegated解决方案是一个很好的起点。

of1yzvn4

of1yzvn43#

使用VirtioFS可显著提高Docker在macOS上的性能。

macOS 12.5和Docker桌面4.15

Docker桌面首选项〉常规

[x] Use Virtualization framework (select this option)
Choose file sharing implementation for your containers: pick VirtioFS

macOS 12.3(英特尔)或12.2(Apple M1)和Docker桌面4.6,您可以启用实验功能:

要在Docker Desktop中启用虚拟化:
确保您使用的是Docker Desktop version 4.6, available here

  • 导航至“首选项”(齿轮图标)〉“实验功能”
  • 选择“使用新的虚拟化框架”和“启用VirtioFS加速目录共享”切换
  • 单击“应用并重新启动”

Speed boost achievement unlocked on Docker Desktop 4.6 for Mac - March 16 2022
在搭载2.6GHz 6核英特尔酷睿i7的MacBook Pro 2019上,即便是docker ps这样简单的命令,执行起来也不到一秒,以前需要3秒。

6ie5vjzr

6ie5vjzr4#

一种选择是使用http://docker-sync.io/,但您不会获得与基于Linux的计算机相同的性能。

pinkon5k

pinkon5k5#

使用Mutagen同步卷

这是一个已知的问题,Docker for Mac在使用包含大量文件的共享卷时速度很慢,请参见https://github.com/docker/for-mac/issues/77
因此,一些变通方法如:cacheddocker-sync出现了,但并不完全令人满意,因为与本机(Linux)相比,它仍然很慢,而且同步时docker-sync会消耗大量资源。
也就是说,有一个很好的替代方案,甚至可以说是完美的,那就是Mutagen。它几乎和Linux上的本地共享卷一样快!
基准测试可用:

  • 资料来源:媒体文章 *

我创建a full example for a Symfony project是为了展示如何使用它,但是它可以用于任何语言的任何类型的项目。

jtjikinw

jtjikinw6#

我遇到了同样的问题,请求可能需要20秒以上!
修复方法是禁用“使用新的虚拟化框架”

我还尝试了“VirtioFS”实验选项,这使它更快,但它会不断锁定。禁用它们都修复了所有问题。

rxztt3cl

rxztt3cl7#

这是知道的。Docker和Mac的问题...他们不是最好的朋友,但他们可以一起玩。
:cached添加到卷中,速度缓慢将是可控的。

jchrr9hc

jchrr9hc8#

对于任何仍然有这个问题的人,我读了 * StefanPrintezis * here在gitHub上的一篇文章。基本上,当你不调试的时候,关闭xDebug
配置:MacBook Pro 2018,PHPSorm 2021.3.1,Docker桌面4.5.0(74594)与2 CPU/4GB RAM.使用默认卷配置.

j91ykkif

j91ykkif9#

我建议使用Parallels(macOS的最佳虚拟化)。然后:
1.安装Linux
1.安装ssh服务器
1.安装对接器
如果您使用VSCode,您可以安装SSH扩展,它的速度足以编辑文件。您还可以通过虚拟机的IP地址访问您的网站。

相关问题