Windows使用WSL2搭建Docker环境

发布日期: 2023-04-14 14:48:47 作者: Stephen 评论: 2

适用于 Linux 的 Windows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。

什么是WSL2

WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。

这一新的体系结构改变了这些 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,但仍然提供与 WSL 1(当前广泛可用的版本)中相同的用户体验。

单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。

安装WSL2

  1. 打开控制面板启用 适用于Linux的Windows子系统虚拟机平台

  1. 使用 PowerShellCMD 设置WSL默认版本
wsl --set-default-version 2
  1. 安装Linux发行版
# 查看可安装的发行版
wsl --list --online

# 安装指定的Linux发行版
# wsl --install -d <Distribution Name>
wsl --install -d Ubuntu

# 进入Linux发行版
wsl

安装Docker Desktop

下载地址:https://docs.docker.com/desktop/install/windows-install/

安装好 Docker Desktop 后,可直接在安装的Linux发行版中使用Docker命令了

Windows 安装 Docker Desktop 已自动安装好 docker-compose

# 查看所有docker容器
sudo docker ps -a

构建Docker容器

E:\www 下新建 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:
      - ./:/var/www/html
    networks:
      net:
        ipv4_address: 172.18.0.11

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

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

E:\www 下新建 nginx.conf Nginx配置文件

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 php74:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

构建项目容器

docker-compose up -d

构建成功,浏览器访问 http://127.0.0.1/

项目以空的 Laravel 为例,但细心的朋友可能会发现,响应速度特别的慢,大概在6s左右,这极大影响了我们的开发效率,接下来我们就要去做优化了。

优化方案:《解决WSL2 Docker运行慢的问题

资料

https://learn.microsoft.com/zh-cn/windows/wsl/

TeacherDu 1年前
听过WSL2的性能没有WSL1好!
博主 1年前
@ TeacherDu 个人感觉,除了性能差点,其它体验性还是可以