Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
878 views
in Technique[技术] by (71.8m points)

Windows Docker 搭建nginx+php 访问框架应用极慢。如何解决磁盘IO问题?

最近在使用Docker For Windows 搞开发环境。

只是访问index.php是正常速度,但是访问框架应用时速度会变得极慢
下面贴出我的yml文件以及php的Dockerfile
docker-compose.yml

version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - ../nginx/conf:/etc/nginx/conf.d:cached
      # - ../../www:/wwwroot:cached
    networks:
      dev:
        ipv4_address: 172.19.0.2
  php:
    build: ../php
    container_name: php73
    restart: always
    depends_on:
      - nginx
    volumes:
      - ../../www:/wwwroot:cached
    networks:
      dev:
        ipv4_address: 172.19.0.10


  mysql:
    image: mysql:5.7
    container_name: mysql57
    restart: always
    depends_on:
      - php
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      #- ../mysql/etc-mysql:/etc/mysql
      - ../mysql/:/var/lib/mysql
    networks:
      dev:
        ipv4_address: 172.19.0.20

networks:
  dev:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16

Dockerfile

FROM php:7.3-fpm-alpine

# Version
ENV PHPREDIS_VERSION 4.0.0

COPY ./inotify-2.0.0.tgz /tmp/inotify-2.0.0.tgz
# ifconfig eth0:0 173.200.7.100 netmask 255.255.255.0 up
# Libs
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 
    && apk  add  
        curl 
        vim  
        wget 
        git 
        openssl-dev
        zip 
        unzip 
        g++ make autoconf 
        inotify-tools

# docker方式安装PDO extension                                                                                # 安装扩展
RUN mv "$PHP_INI_DIR/php.ini-production"  "$PHP_INI_DIR/php.ini" 
    && docker-php-ext-install pdo_mysql 
    && docker-php-ext-install pcntl 
    && docker-php-ext-install sysvmsg 
    && wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz 
    && pecl install /tmp/redis.tar.tgz 
    && rm -rf /tmp/redis.tar.tgz 
    && docker-php-ext-enable redis 
    && pecl install swoole 
    && pecl install /tmp/inotify-2.0.0.tgz 
    && rm -rf /tmp/inotify-2.0.0.tgz 
    && docker-php-ext-enable inotify 
    && docker-php-ext-enable swoole

EXPOSE 9000
#设置工作目录
WORKDIR  /wwwroot

仅仅在路由输出一句话
image.png
image.png
要用4s 加了cached好像不管用


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

? 不推荐这样用,因为我已经踩过坑了。

在 2004 以前使用 Hyper-V 版本的 Docker Desktop 运行项目很慢,后来升级到 2004 后,听说 WSL2 有很大的提升,测试后发现任然很慢,瓶颈全在 IO 上,如果是部署应该使用 COPY 的方式把代码 copy 进去,如果是开发,建议还是选择 Windows 平台的集成环境,比如 Laragon

WSL 挂载的目录同理。

如果你的代码需要 Linux 环境,比如 Swoole,那建议你创建一个虚拟机或者使用 WSL2(不要使用挂载目录),然后使用 FTP 来同步你的代码(你可能需要写个脚本来自动执行 composer install 和 npm i ?,不然你需要手动去执行)。

或者直接搭建桌面环境的 Linux 虚拟机在里面操作(前端时间新装的 Kubuntu 发现运行不了 PHPStorm ?),而且大部分桌面 Linux 也不是那么好用,所以如果是非必要,还是建议你使用Windows 平台下的集成环境


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...