解决WSL2 Docker运行慢的问题

发布日期: 2023-04-14 16:15:20 作者: Stephen 评论: 2

最近在Windows中使用Docker容器运行项目时发现,发现响应速度特别慢,这特别影响我们的开发效率,这是由于WSL2跨系统文件读写性能差的原因。

Docker是跑在 WSL2 里的,虽说 WSL2 相比 WSL1 更先进,但在跨系统文件读写性能方面是比 WSL1 差的,因此,跑在 WSL2 里的Docker想要跨系统访问Windows系统上的代码文件的话,性能是很差的。

参考:比较 WSL 1 和 WSL 2

Docker Engine Use WSL2

Docker 设置中勾选 Use the WSL 2 based engine ,使用 WSL2

项目初始化

WSL2 Linux 发行版中创建项目

# 进入Linux发行版
wsl

# 创建项目目录
mkdir -p /data/www
cd /data/www

# 从git仓库中拉取项目
git clone https://github.com/laravel/laravel.git

Docker-compose构建容器

docker-compose.yaml

version: '1.0'
services:
  php74:
    image: registry.cn-hangzhou.aliyuncs.com/cqcqs/php74-fpm
    container_name: php74
    restart: always
    ports:
      - 9000:9000
    volumes:
      - /data/www/laravel:/var/www/html
    networks:
      net:
        ipv4_address: 172.18.0.11

  nginx:
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - 80:80
    volumes:
      - /data/www/laravel:/var/www/html
      - /data/www/nginx.conf:/etc/nginx/conf.d/default.conf
    working_dir: /var/www/html
    links:
      - php7
    networks:
      net:
        ipv4_address: 172.18.0.13

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.19.0.0/24

nginx.conf

server {
    listen 80;
    root /var/www/html/public;

    error_log /var/log/nginx/error.log;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass php7:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

构建 docker-compose

docker-compose up -d

composer install

由于我的发行版上没有安装 PHP Composer ,就直接进入PHP容器安装Laravel项目依赖

# 进入PHP容器
docker exec -it php74
# 安装composer包
composer install
php artisan key:generate

PHPStorm 开发

先在Linux发行版,项目目录中设置权限,否则PHPStorm无法编辑

chmod -R 777 ./

PHPStorm -> Open -> 输入\\wsl$\Ubuntu 打开项目目录

完成

浏览器打开 http://127.0.0.1/ ,可见速度提升了很多

TeacherDu 1年前
Docker Desktop安装后,不是可以直接运行了吗?还需要借助WSL2?
博主 1年前
@ TeacherDu 跨系统IO太慢了