WSL2使用
前言
Windows Subsystem for Linux (WSL) 是 Windows 的一项功能,允许您在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双重启动。 WSL 旨在为想要同时使用 Windows 和 Linux 的开发人员提供无缝且高效的体验。 WSL2 使用虚拟化技术在轻量级实用虚拟机 (VM) 内运行 Linux 内核,与 WSL 架构相比,WSL2 提高了文件系统性能并增加了完整的系统调用兼容性。
1. 安装 WSL2
以管理员身份运行PowerShell
输入以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 这将启用 WSL 功能,但不会立即重启计算机。
接着输入命令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 这将启用虚拟机平台,这是运行 WSL2 所必需的。完成后需要重启电脑。
然后打开Microsoft Store
并搜索wsl
,选择一个发行版下载安装,例如选择Ubuntu 20.04.6 LTS
。
然后在 PowerShell 中运行以下命令,将 WSL2 设置为默认的 Linux 版本:
wsl --set-default-version 2
- 这将确保你安装的任何新的 Linux 发行版都将默认使用 WSL2。
然后按照 Ubuntu 系统提示设置好用户名和密码即可。
wsl 常用命令:
# 启动子系统
wsl
# 列出所有子系统状态
wsl -l -v
# 关闭子系统
wsl --shutdown
2. 安装 Docker
2.1 安装 Docker Engine
参照 Docker 官网 操作。
2.2 设置 Docker 命令无需 sudo
参照 Docker 官网 操作。
2.3 安装 Docker-Compose
参照 Docker 官网 操作。
2.4 配置镜像源
编辑 /etc/docker/daemon.json
文件,没有就创建一个,文件内容如下:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
3. 优化 WSL2 启动
默认情况下有两个问题:
- 打开命令行输入
wsl
等待几秒钟就会启动子系统,同时也会自启 Docker,一旦关闭命令行后,子系统也会自动关闭,Docker 也就无法访问了; - 子系统默认会占用主机一半的资源(如CPU、内存等);
上述问题解决方式,创建一个文件如wsl-startup.vbs
,填写如下内容:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Ubuntu-20.04", 0
其中发行版的名称根据实际情况写,我这里是Ubuntu-20.04
,根据wsl -l -v
命令下显示的名称写的。双击运行会开启 WSL 实例,它会永久等待输入,不会关闭。所以当你下次再使用WSL命令时,就不会遇到需要重新唤醒 WSL 的耗时。 也可以设置为开机启动,win+R
运行shell:startup
打开启动目录,将脚本放进去,这样当系统启动登录系统后,Windows会自动执行脚本。
在 Windows 的用户目录,即%USERPROFILE%
下有个.wslconfig
文件,没有就创建一个,填写如下内容:
[wsl2]
memory=4GB
processors=2
资源限制根据自己电脑实际配置调整,这样当子系统启动时就会读取这个文件。更多配置请参考官网
附加
记录下dcoker-compose.yaml
文件配置:
version: '3.3'
networks:
net:
driver: bridge
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: unless-stopped
environment:
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- net
ports:
- 3306:3306
volumes:
# 数据目录
- ${ROOT_PATH}/mysql/data:/var/lib/mysql
# 配置文件
- ${ROOT_PATH}/mysql/conf/my.cnf:/etc/my.cnf
# 日志
- ${ROOT_PATH}/mysql/log:/var/log/mysql
redis:
image: redis:6.0
container_name: redis
restart: unless-stopped
networks:
- net
ports:
- 6379:6379
# 设置访问密码
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
# 数据目录
- ${ROOT_PATH}/redis/data:/data
# nginx:
# image: nginx:1.23
# container_name: nginx
# restart: unless-stopped
# networks:
# - net
# ports:
# - 80:80
# volumes:
# # 配置文件目录
# - ${ROOT_PATH}/nginx/conf:/etc/nginx
# # 静态文件
# - ${ROOT_PATH}/nginx/html:/usr/share/nginx/html
# # 日志目录
# - ${ROOT_PATH}/nginx/log:/var/log/nginx
同级目录下创建.env
文件:
ROOT_PATH=~/.docker/develop
#
# mysql
MYSQL_ROOT_PASSWORD=8le0snJvDn
MYSQL_DATABASE=develop
MYSQL_USER=mayee
MYSQL_PASSWORD=LpotkYvf26
# redis
REDIS_PASSWORD=KQglpfgWgZ
文件目录即为 compose stack 的名称,创建的网络名称会在前面加 stack 名称前缀。
使用docker-compose up -d
可创建并启动全部容器,docker-compose up -d mysql redis
启动指定容器,docker-compose down
停止并销毁 compose stack 中定义的所有容器即网络。
可在 ~/.bashrc
文件中定义指令别名,达到简写的目的,如:
alias dk='docker'
alias dkcp='docker-compose'
alias dev='cd ~/.docker/develop'
版权所有
版权归属:Mayee