在使用laravel框架的时候,在windows10下面使用docker部署完环境之后,发现一个简单的接口需要6-7秒;经过排查发现可能是docker的问题,最终找到原因如下(读取文件缓慢导致的卡顿):
默认docker采用的wsl2 based engine
image.png
最后的解决方案是,取消wsl2;或者安装wsl2 distros,执行下面的命令:
wsl --install
执行完之后,启用、刷新;
image.png
发现电脑上面多了一个网络文件夹结构,截图如下:
image.png
然后,把项目文件都放进来,发现无权限,需要执行如下命令:
C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps\ubuntu.exe config --default-user root
我的docker-compose.yaml文件如下:
version: '3'
services:
php:
build: ./php
container_name: php
environment:
- TZ=Asia/Shanghai # 设置时区
volumes:
- ./php/php-fpm.d:/usr/local/etc/php-fpm.d
- ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf
- ./nginx/html:/usr/share/nginx/html
links:
- "mysql"
- "redis"
networks:
- backend
nginx:
container_name: "nginx"
image: nginx:latest
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
depends_on:
- "php"
links:
- "php"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/log:/var/log/nginx
- ./nginx/html:/usr/share/nginx/html
networks:
- backend
mysql:
container_name: "mysql"
image: mysql:latest
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
- ./mysql/logs:/data/mysql/logs
restart: always
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
networks:
- backend
redis:
container_name: redis
image: redis:6.0.2
restart: always
ports:
- "6379:6379"
volumes:
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
- ./redis/data:/data
environment:
- TZ=Asia/Shanghai
networks:
- backend
networks:
backend:
driver: bridge
dockerfile文件如下:
# 版本7.4
FROM php:7.4-fpm
# composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/bin/composer && chmod +x /usr/bin/composer
# 各种依赖库和扩展
RUN apt-get update \
&& apt-get install -y \
build-essential \
libmagickcore-dev \
libmagickwand-dev \
imagemagick \
libfreetype6-dev \
libmcrypt-dev \
libpng-dev \
libzip-dev \
libwebp-dev \
&& docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ \
&& docker-php-ext-install -j$(nproc) gd iconv pdo_mysql mysqli bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm zip \
&& pecl install redis-6.0.2 \
&& pecl install imagick \
&& pecl install mcrypt \
&& docker-php-ext-enable redis imagick mcrypt
# 这句很重要,如果和你的nginx用户不同会导致你的服务起不来
RUN groupadd www && useradd -g www www