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好像不管用

阅读 4.9k
2 个回答

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

在 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 平台下的集成环境

mac 也一样慢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏