MacOs中的Docker非常慢

tra*_*ker 8 php symfony docker docker-compose

我有这个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'
Run Code Online (Sandbox Code Playgroud)

当我在symfony 4中运行我的最新项目时,它的运行速度非常慢... :(

我有新的MacO和Docker桌面。我目前正在学习Symfony和Laravel框架,但这对于Docker来说非常慢。它甚至都没有工作。

我该如何修理?

pyb*_*pyb 16

使用 VirtioFS 显着提高了 macOS 上的 Docker 性能。

\n

macOS 12.5 和 Docker 桌面 4.15

\n

Docker 桌面首选项 > 常规

\n
[x] Use Virtualization framework (select this option)\nChoose file sharing implementation for your containers: pick VirtioFS\n
Run Code Online (Sandbox Code Playgroud)\n

macOS 12.3 (Intel) 或12.2 (Apple M1) 和Docker Desktop 4.6,您可以启用实验性功能:

\n
\n

要在 Docker Desktop 中启用 virtiofs:

\n

确保您使用的是Docker Desktop 版本 4.6,可在此处获取

\n
    \n
  • 导航到 \xe2\x80\x98Preferences\xe2\x80\x99(齿轮图标)> \xe2\x80\x98Experimental Features\xe2\x80\x99
  • \n
  • 选择\xe2\x80\x98使用新的虚拟化框架\xe2\x80\x99和\xe2\x80\x98启用VirtioFS加速目录共享\xe2\x80\x99切换
  • \n
  • 单击\xe2\x80\x98应用并重新启动\xe2\x80\x99
  • \n
\n
\n

Mac 版 Docker Desktop 4.6 上解锁速度提升成就 - 2022 年 3 月 16 日

\n

在 MacBook Pro 2019、2.6 GHz 6 核 Intel Core i7 上,即使是简单的命令(例如docker ps执行时间不到一秒)。之前需要3秒。

\n

  • 现在,它位于“常规”>“为容器选择文件共享实现”> VirtioFS 下 (2认同)

Luk*_*nga 11

正如其他答案中提到的,问题归结为 Docker 与 OSX 上的文件系统交互的方式。

我找到了一篇关于如何在 OSX 上加快速度的很棒的文章:

https://vivait.co.uk/labs/docker-for-mac-performance-using-nfs

从文章中,真正的解决方案是更改文件系统以使用 NFS,但由于我对 Docker 一无所知(它是在工作中为我设置的),我选择使用较新版本的 Docker 中提供的选项

我添加:delegated到了volumesin下的所有选项docker-compose.yml。重新启动我的容器后,每个容器的速度几乎是以前的两倍。不如原生快,但足够快。

文章示例:

app:
    build:
        context: .
        dockerfile: ./docker/app/Dockerfile
    working_dir: /app
    user: "www-data"
    volumes:
        - ./:/app:delegated
        - ./:/another_folder:delegated
Run Code Online (Sandbox Code Playgroud)

NFS 示例很长,基本上需要复制文章的一半,所以我不会添加它,但是这个:delegated解决方案是一个很好的起点。


小智 7

实际上,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。这是我的Symfony在Docker上的总执行时间。(显然,这取决于您的前端和数据库查询,但是我尝试向您介绍主要逻辑。

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

只要我在没有Docker的情况下使用Symfony,以下就是我的总执行时间。

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

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

volumes:
        - .:/application:cached
Run Code Online (Sandbox Code Playgroud)

  • “不幸的是,Mac OS 和 Windows 无法提供此功能。” - 不是这样,Windows 可以通过 WSL2 提供 linux 内核。与 Windows 应用程序相比,Docker 的运行速度非常快。 (5认同)
  • @GrzegorzPietrzak WSL2 本身仍然是一个虚拟机,根据我的理解,需要 Hyper-V。 (3认同)

Moh*_*ibi 7

一种选择是使用http://docker-sync.io/但您将无法获得与在基于 Linux 的机器上相同的性能。

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。- [来自评论](/review/low-quality-posts/28359058) (2认同)

Kwa*_*adz 5

使用 Mutagen 同步卷

Docker for Mac 在使用包含大量文件的共享卷时速度缓慢是一个已知问题,请参阅https://github.com/docker/for-mac/issues/77

因此,出现了一些解决方法,例如:cacheddocker -sync。然而它并不完全令人满意,因为与本机(Linux)相比它仍然很慢,并且 docker-sync 在同步时会消耗大量资源。

话虽这么说,有一个很好的替代方案,但不能说是完美的,那就是Mutagen。它几乎与 Linux 的本机共享卷一样快!

可以使用一个基准:

在此输入图像描述 来源:Medium 上的文章

为 Symfony 项目创建了一个完整的示例来展示如何使用它,但它可以用于任何语言的任何类型的项目。