MacOs 中的 Docker 非常慢

2022-08-30 13:10:07

我有这个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中运行我的最新项目时,它的工作非常缓慢...... :(

我有新的MacO和Docker Desktop。我目前正在学习Symfony和Laravel框架,但这对Docker来说非常慢。它甚至没有在努力。

我该如何修复它?


答案 1

事实上,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 cache(:Docker for volume 的 cached property): 195 ms

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

  • 不带 Docker,带 Symfony 缓存:82 毫秒

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

volumes:
        - .:/application:cached

答案 2

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

我发现了一篇关于如何在OSX上使事情变得更快的好文章:

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

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

我添加了 中 下的所有选项。重新启动容器后,每个容器的速度几乎是以前的两倍。没有原生那么快,但足够快。:delegatedvolumesdocker-compose.yml

文章中的示例:

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

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


推荐