Php Docker for Windows上的Laravel应用程序性能问题
我试图在笔记本电脑上的docker容器中运行我的laravel应用程序(在开发过程中),发现与使用XAMPP运行相比,该应用程序的速度非常慢 我的笔记本电脑运行的是Windows10Pro(64位),配有i7-6700HQ CPU、16GB RAM和SSD 在docker for windows中运行应用程序时,平均页面加载时间约为3.5秒 在本地XAMPP上运行它,平均页面加载时间约为350毫秒(0.35秒)Php Docker for Windows上的Laravel应用程序性能问题,php,windows,laravel,docker,Php,Windows,Laravel,Docker,我试图在笔记本电脑上的docker容器中运行我的laravel应用程序(在开发过程中),发现与使用XAMPP运行相比,该应用程序的速度非常慢 我的笔记本电脑运行的是Windows10Pro(64位),配有i7-6700HQ CPU、16GB RAM和SSD 在docker for windows中运行应用程序时,平均页面加载时间约为3.5秒 在本地XAMPP上运行它,平均页面加载时间约为350毫秒(0.35秒) 对于docker设置,我使用以下图像/Dockerfile: FROM alpin
对于docker设置,我使用以下
图像/Dockerfile
:
FROM alpine:3.8
MAINTAINER Latheesan Kanesamoorthy
RUN apk add \
--no-cache \
--update \
apache2 \
composer \
curl \
php7 \
php7-apache2 \
php7-curl \
php7-bcmath \
php7-dom \
php7-mbstring \
php7-pdo_mysql \
php7-session \
php7-sockets \
php7-tokenizer \
php7-xml \
php7-xmlwriter \
php7-fileinfo \
&& mkdir -p /run/apache2 \
&& ln -sf /dev/stdout /var/log/apache2/access.log \
&& ln -sf /dev/stderr /var/log/apache2/error.log
COPY ./image/*.conf /etc/apache2/conf.d/
COPY ./image/php.ini /etc/php7/conf.d/99_custom.ini
RUN mkdir -p /storage/framework/testing
RUN mkdir -p /storage/framework/views
RUN mkdir -p /storage/framework/sessions
RUN mkdir -p /storage/framework/cache/data
RUN chown -R apache:apache /storage
WORKDIR /app
COPY ./src/composer.* ./
RUN composer install -n --no-autoloader --no-scripts --no-progress --no-suggest
COPY src .
RUN composer dump-autoload -o -n
EXPOSE 80
和docker compose.yml
:
version: '2.1'
services:
mysql:
container_name: myapp-mysql
mem_limit: 512M
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: myapp
MYSQL_DATABASE: myapp
MYSQL_USER: myapp
MYSQL_PASSWORD: myapp
ports:
- "35000:3306"
redis:
container_name: myapp-redis
image: redis:latest
redis-commander:
container_name: myapp-redis-commander
image: rediscommander/redis-commander:latest
hostname: redis-commander
restart: always
environment:
- REDIS_HOSTS=local:redis:6379
ports:
- "7050:8081"
links:
- redis
app:
container_name: myapp-app
mem_limit: 512M
build:
context: ""
dockerfile: image/Dockerfile
env_file:
- image/env/development
volumes:
- ./src:/app:cached
ports:
- "25000:80"
entrypoint: httpd -DFOREGROUND
links:
- mysql
- redis
我使用以下命令启动它:
docker-compose down --remove-orphans
docker-compose up -d --build
docker exec myapp-app composer install --prefer-dist --no-suggest
docker exec myapp-app php artisan cache:clear
docker exec myapp-app php artisan migrate:fresh --seed
如您所见,docker版本使用redis作为驱动程序:缓存、雄辩模型缓存、队列和会话
在本地,对于XAMPP,我只是使用文件驱动程序
知道为什么docker的表现这么慢吗
另外,我之所以想尝试使用docker环境进行开发,是为了让我的开发和生产环境保持一致。windows上的docker性能通常很差。您可以采取一些步骤来改进它,但它永远无法与unix系统相比。最有效的步骤是确保所有依赖项(
供应商
,节点_模块
)都安装在容器中,并且只有项目文件(即:应用程序
)在主机上。这应该会加快速度。除此之外,您还可以使用它更好地了解瓶颈所在。也就是说,350ms的速度仍然非常慢,因此应用程序的某些方面可能会加剧这种速度。相比之下,我的应用程序每页加载时间>50ms是很少见的,除非有很多查询在运行,一个无查询的Laravel页面通常需要我有雄辩的模型缓存、空间/级别权限检查和其他几条查询在每页加载时间运行。缓存预热后,我看到大约200毫秒的响应时间。所以,在windows上使用docker似乎没有任何帮助,我还不如双启动ubuntu。也许如果你在linux服务器上测试它是否会面临同样糟糕的性能?我相当肯定该应用程序在linux上会运行得尽可能快。问题是我是在windows上开发的,我试着让它在docker下运行,似乎windows docker与linux上的本机docker并不接近。