我有这个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来说非常慢。它甚至没有在上面工作。
我怎样才能修好它?
9条答案
按热度按时间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总执行时间。(显然,这取决于您的前端和数据库查询,但我试图启发您的主要逻辑。)
只要我使用没有Docker的Symfony,下面是我的总执行时间。
然而,我们可以做一些改进来获得更好的工作空间。例如,您可以使用这样的卷,
gzjq41n42#
正如在其他回答中提到的,问题归结为Docker与OSX上的文件系统交互的方式。
我发现了一篇关于如何在OSX上让事情变得更快的文章:
https://vivait.co.uk/labs/docker-for-mac-performance-using-nfs
从本文中可以看出,真实的的解决方案是更改文件系统以使用NFS,但由于我对Docker一无所知(它是在工作中为我设置的),因此我选择使用Docker较新版本中提供的选项
我在
docker-compose.yml
中的volumes
下的所有选项中添加了:delegated
。重新启动我的容器后,每个都比以前快了近两倍。虽然没有原生快,但足够快了。文章示例:
NFS示例相当长,基本上需要复制本文的一半内容,因此我不添加它,但这个
:delegated
解决方案是一个很好的起点。of1yzvn43#
使用VirtioFS可显著提高Docker在macOS上的性能。
macOS 12.5和Docker桌面4.15
Docker桌面首选项〉常规
macOS 12.3(英特尔)或12.2(Apple M1)和Docker桌面4.6,您可以启用实验功能:
要在Docker Desktop中启用虚拟化:
确保您使用的是Docker Desktop version 4.6, available here
Speed boost achievement unlocked on Docker Desktop 4.6 for Mac - March 16 2022
在搭载2.6GHz 6核英特尔酷睿i7的MacBook Pro 2019上,即便是
docker ps
这样简单的命令,执行起来也不到一秒,以前需要3秒。6ie5vjzr4#
一种选择是使用http://docker-sync.io/,但您不会获得与基于Linux的计算机相同的性能。
pinkon5k5#
使用Mutagen同步卷
这是一个已知的问题,Docker for Mac在使用包含大量文件的共享卷时速度很慢,请参见https://github.com/docker/for-mac/issues/77。
因此,一些变通方法如
:cached
和docker-sync出现了,但并不完全令人满意,因为与本机(Linux)相比,它仍然很慢,而且同步时docker-sync会消耗大量资源。也就是说,有一个很好的替代方案,甚至可以说是完美的,那就是Mutagen。它几乎和Linux上的本地共享卷一样快!
基准测试可用:
我创建a full example for a Symfony project是为了展示如何使用它,但是它可以用于任何语言的任何类型的项目。
jtjikinw6#
我遇到了同样的问题,请求可能需要20秒以上!
修复方法是禁用“使用新的虚拟化框架”
我还尝试了“VirtioFS”实验选项,这使它更快,但它会不断锁定。禁用它们都修复了所有问题。
rxztt3cl7#
这是知道的。Docker和Mac的问题...他们不是最好的朋友,但他们可以一起玩。
将
:cached
添加到卷中,速度缓慢将是可控的。jchrr9hc8#
对于任何仍然有这个问题的人,我读了 * StefanPrintezis * here在gitHub上的一篇文章。基本上,当你不调试的时候,关闭xDebug。
配置:MacBook Pro 2018,PHPSorm 2021.3.1,Docker桌面4.5.0(74594)与2 CPU/4GB RAM.使用默认卷配置.
j91ykkif9#
我建议使用Parallels(macOS的最佳虚拟化)。然后:
1.安装Linux
1.安装ssh服务器
1.安装对接器
如果您使用VSCode,您可以安装SSH扩展,它的速度足以编辑文件。您还可以通过虚拟机的IP地址访问您的网站。