6675 字
33 分钟
WSL2快速指南

一. 什么是 WSL2#

2016 年,微软宣布可以在 Windows 10 中将 Linux 作为一个子系统运行,这被称为 WSL 或 Windows Subsystem for Linux。

通过 Linux 访问 Windows 10 中的文件系统既简单又快速,但是除了其他本机工件之外,我们还没有完整执行 Linux 内核,这使得无法在 Linux 中执行多个任务,其中之一是Docker。

2019 年,微软发布了 WSL 2,与第 1 版相比,动态性有所改进:

  • 运行完整的 Linux 内核。
  • 在 Linux 中访问文件的性能更好。
  • 完整的系统调用兼容性。

WSL 2于2020年5月28日正式上线。

借助 WSL 2,可以使用 Windows 10/11 运行 Docker 和其他依赖于 Linux 内核的工具。

二. 最低要求#

  • Windows 10 家庭版或专业版

  • Windows 11 家庭版或专业版

    • 版本 22000 或更高版本(任何 Windows 11)。
  • 与虚拟化兼容的计算机(根据处理器的品牌检查可用性。如果您的计算机较旧,可能需要在 BIOS 中启用它)。

  • 至少 4GB 内存(建议 8GB)。

  • 使 Windows 保持最新非常重要,因为 WSL 2 依赖于 Hyper-V 的更新版本。检查 Windows 更新。

三. WSL 2 安装#

1. Windows更新#

确保您的 Windows 是最新的,因为 WSL 2 依赖于 Hyper-V 的更新版本。检查 Windows 更新。

2. 更新WSL#

对于 Windows 10 或 Windows 11 版本 2004,您的计算机上已存在 WSL,请运行以下命令来获取最新版本的 WSL:

wsl --update

获取最新版本的 WSL。

3. 将 WSL 的默认版本分配给版本 2#

WSL 版本 1 可能是您计算机上的默认版本,请运行以下命令将版本 2 设置为默认版本:

wsl --set-default-version 2

4. 安装Ubuntu#

运行命令:

wsl --install

此命令将安装 Ubuntu 作为默认 Linux。

如果您想安装不同版本的 Ubuntu,请运行命令 wsl -l -o 。将列出所有可用的 Linux 版本。使用 wsl --install -d nome-da-distribuicao 命令安装所选版本。

我们建议使用 Ubuntu(无版本),因为它是一个流行的发行版,并且默认安装了一些有用的开发工具。

命令完成后,您必须创建一个与您的计算机相同的用户名和密码,这将是 WSL 实例的 root 用户。

要打开新的 Ubuntu 窗口,只需在开始菜单中输入 Ubuntu 并单击 Ubuntu 图标即可。

我们建议使用 Windows 终端作为 Windows 开发的默认终端。它将把 Ubuntu shell 以及 PowerShell 和 CMD 聚合到一个窗口中。

5. (可选)将 Linux 发行版的版本从 WSL 1 更改为 WSL 2#

如果您安装的Linux发行版是版本1,您可以使用以下命令更改为版本2:

wsl --set-version <distribution name> 2

恭喜,您的 WSL2 现已运行

6. 通过 Windows 应用商店安装 WSL 2#

还可以从 Windows 应用商店安装 Linux 发行版。在 Windows 应用商店应用程序中选择您喜欢的 Linux 发行版,我们建议使用 Ubuntu(无版本),因为它是一个流行的发行版,并且默认安装了一些有用的开发工具。

四. (可选/但推荐)使用 Windows Terminal 作为默认的 Windows 开发终端#

Windows 一直存在的一个缺点是提供了合适的开发终端。现在我们拥有 Microsoft 自己构建的 Windows 终端,它允许您在选项卡中运行终端、更改颜色和主题、配置快捷方式等等。

从 Windows 应用商店安装它并使用这些默认设置来启用 WSL 2、Git Bash 和 Dracula 主题以及一些快捷方式。

Link do Windows Terminal

要覆盖设置,请访问设置菜单并单击“打开设置 JSON 文件”按钮,它将在 VSCode 中打开 Windows 终端设置,只需粘贴 JSON 文件的内容并保存,然后单击 Ubuntu 部分中,单击 Diretório inicial 并将路径更改为: (\\wsl$\Ubuntu\home\SEU_USUÁRIO_UBUNTU)

五. WSL 2 可以使用您计算机的哪些资源#

我们可以说 WSL 2 几乎可以完全访问您的计算机资源。默认情况下它具有访问权限:

  • 所有硬盘。
  • 充分利用加工资源。
  • 使用 80% 的可用 RAM。
  • 将 25% 的可用内存用于交换。

这可能并不有趣,因为 WSL 2 几乎可以使用您计算机的所有资源,但我们可以配置限制。

(C:\Users\<seu_usuario>) 用户文件夹的根目录中创建一个名为 .wslconfig 的文件并配置以下设置:

[wsl2]
memory=8GB
processors=4
swap=2GB

这些是示例限制和要使用的最基本配置,请根据您的可用性进行配置。有关更多详细信息,请参阅此 Microsoft 文档:https://learn.microsoft.com/pt-br/windows/wsl/wsl-config#configuration-setting-for-wslconfig。

要应用这些设置,需要重新启动 Linux 发行版。运行命令: wsl --shutdown (此命令将关闭所有活动的 WSL 2 实例,只需再次打开终端即可使用新设置来使用它们)。

六. 什么是 Docker#

Docker 是一个开源平台,可以将应用程序打包到容器中。应用程序可以适应并在任何安装了该技术的机器上运行。

1. 为什么使用 WSL 2 + Docker 进行开发#

在Windows上设置开发环境一直是官僚和复杂的,而且一些工具的性能并不完全令人满意。

随着 Docker 的诞生,这种情况得到了很大改善,因为我们可以独立、快速地建立基于 Unix 的开发环境,并且仍然与其他操作系统统一。

Veja nossa live sobre WSL 2 + Docker no canal 完整周期:https://www.youtube.com/watch?v=On_nwfkiSAE。

2. Windows 使用 Docker 的方法#

  • (已过时)Docker 工具箱
  • (已过时)Docker Desktop com Hyper-V。
  • Docker Desktop com WSL2。
  • Docker Engine(Native Docker)直接安装在WSL2上。

3. (已过时)Docker 工具箱#

它运行在 Oracle 的系统虚拟化程序(称为 VirtualBox)之上。 Docker Toolbox 性能可能非常差,导致无法使用。

它还可以在旧版 Windows 上使用,例如 XP、Vista、7、8 和 8.1。

4. (已过时)Docker Desktop com Hyper-V#

它运行在 Microsoft 的 Hyper-V 之上,而不是使用使用 Docker Toolbox 的 VirtualBox。 Docker Desktop with Hyper-V 需要 Windows 10/11 PRO 版本,因此如果没有,则需要购买。

Hyper-V 往往需要大量机器资源,虽然其性能比 Docker Toolbox 更好,但在 Windows 中使用其他东西时机器可能会很慢。

Docker 已经取消了对 Hyper-V 的支持。

5. 使用 WSL2 的 Docker 桌面#

它运行在虚拟机平台之上,虚拟机平台是 Hyper-V 的一个组件。

它与 WSL2 集成,允许您在 Linux 环境中运行 Docker。

无需购买 Windows 10/11 PRO 许可证。

与 Docker Toolbox 或带有 Hyper-V 的 Docker Desktop 相比,它具有出色的性能并且消耗更少的资源。

完全在 Linux 中进行开发有很大的优势,因此,使用 WSL2 + Docker 是在 Windows 上开发应用程序的最佳方式。

好处#

  • 简化了 Windows 和 WSL 2 上的 Docker 配置。
  • 允许您在 WSL 2 之外运行 Docker,从而可以使用任何 shell,例如 PowerShell 或 DOS。
  • 支持 Windows 模式下的容器(在底层包含 Windows 而不是 Linux 的映像)。
  • 创建用于存储 Docker 映像、卷和其他配置的集中式环境。您可以让多个 WSL 2 发行版运行同一个 Docker 实例。
  • 用于管理 Docker 的可视化界面。

缺点#

  • 不运行任何 Docker 容器的初始内存使用量可以达到 3GB。
  • 当您只需要在单个 WSL 中运行 Docker 容器时,添加复杂的基础设施来运行 Docker。

6. Docker Engine(Native Docker)直接安装在WSL2上#

Docker Engine 是在 Linux 环境中运行的本机 Docker,并且完全支持 WSL 2。其安装与 Docker 网站上提供的 Linux 发行版所描述的安装相同。

好处#

  • 消耗运行 Docker Daemon(Docker 服务器)所需的最小内存。
  • 它甚至比 Docker Desktop 更快,因为它直接在 WSL2 实例本身内运行,而不是在单独的 Linux 实例上运行。
  • 我们拥有最好的开发经验,因为我们可以直接在 WSL 2 中使用 Docker,而不需要单独的 Docker Desktop 实例。

缺点#

  • 每次重新启动 WSL 2 时都需要运行命令 sudo service docker start (仅限 Windows 10 用户)。这不一定是劣势,但能得分却是好事。这是一个小细节,但在 Windows 11 中,现在可以通过 /etc/wsl.conf 自动启动 Docker 服务器(请参阅下面的详细信息)。
  • 如果您需要在另一个 WSL 2 实例上运行 Docker,则需要在此实例上再次安装 Docker 或配置对所需 Docker 套接字的访问以在实例之间共享 Docker。
  • 不支持 Windows 模式下的容器。

7. 将 Docker 与 WSL 2 集成#

在本教程的开头,我们看到了在 Windows 上使用 Docker 的 4 种方法,但我们只推荐其中 2 种:

  • Docker Engine(Native Docker)直接安装在WSL2上。
  • Docker Desktop com WSL2。

我们建议您选择第一个选项,因为它的好处,因为大多数人都能够使用 WSL 2 作为中央开发工具,但在本教程中,我们将向您展示两种安装方法。

1 - 安装 Docker com Docker 引擎 (Docker Nativo)#

在 WSL 2 上安装 Docker 与在您自己的 Linux 发行版上安装 Docker 相同,因此如果您有 Ubuntu,则与 Ubuntu 相同,如果是 Fedora,则与 Fedora 相同。通过发行版在 Linux 上安装 Docker 的文档在这里,但让我们看看如何在 Ubuntu 上安装。

对于那些从 Docker Desktop 迁移到 Docker Engine 的人,我们有两个选择

  1. 卸载 Docker 桌面。
  2. 在 Windows 服务中禁用 Docker 桌面服务。此选项允许您在必要时使用 Docker Desktop,对于大多数用户,建议卸载 Docker Desktop。如果您选择第二个选项,则需要删除 ~/.docker/config.json 文件并使用“docker login”命令再次向 Docker 进行身份验证

如果您需要将 Docker 与 VSCode 以外的其他 IDE 集成

VSCode 已经通过远程 WSL 或远程容器扩展以这种方式与 WSL 上的 Docker 集成。

您必须启用通过 TCP 与 Docker 服务器的连接。让我们完成以下步骤:

  1. 创建文件 /etc/docker/daemon.json: sudo echo '{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}' > /etc/docker/daemon.json
  2. 重启Docker: sudo service docker restart

完成此过程后,转到 IDE 并连接到 Docker,选择 TCP 套接字选项并输入 URL http://IP-DO-WSL:2375 。可以使用 cat /etc/resolv.conf 命令找到您的 WSL IP。

如果不起作用,请使用 wsl --shutdown 命令重新启动 WSL,然后再次启动 Docker 服务。

安装先决条件:

sudo apt update && sudo apt upgrade
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

将 Docker 存储库添加到 Ubuntu 源列表:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

注意:如果您使用的是 Ubuntu 以外的发行版,请分别替换上述地址: 示例:在 Debian 上安装 docker-engine:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker 引擎

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

授予以当前用户身份运行 Docker 的权限:

sudo usermod -aG docker $USER

通过 Windows 命令行重新启动 WSL,以便不需要 root 授权即可运行 docker 命令:

wsl --shutdown

再次访问Ubuntu并启动Docker服务:

sudo service docker start

每次重新启动 Linux 时都必须执行上面的命令。如果 Docker 服务未运行,则在运行命令 docker 时会显示以下错误消息:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

安装的 Docker Compose 现在将是版本 2,要运行它而不是使用 docker-compose 使用 docker compose

1)在 Ubuntu 22.04 上启动 Docker 时出错#

如果即使在启动 Docker 服务时出现以下或类似错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?` Run the command `sudo update-alternatives --config iptables` and choose option 1 `iptables-legacy

再次运行 sudo service docker start 。运行 docker ps 这样的 Docker 命令来检查它是否正常工作。如果没有出现上面的错误,那就没问题了。

2)在 WSL 中自动启动 Docker(仅限 Windows 11)#

在 Windows 11 中,可以指定每当 WSL 启动时执行的默认命令,这允许我们将 Docker 服务设置为自动启动。编辑文件 /etc/wsl.conf

运行命令进行编辑:

sudo vim /etc/wsl.conf

按字母 i (进入内容插入模式)并粘贴内容:

[boot]
command = service docker start

2 - Systemd 系统#

WSL 支持 systemdsystemd 是一个初始化和服务管理系统,广泛应用于现代Linux发行版中。它将允许您在 Linux 上使用更复杂的工具,如 snapd、LXD 等。

激活它不是强制性的,并且可以随时停用和重新激活它。要激活它,请编辑文件 /etc/wsl.conf

运行命令进行编辑:

sudo vim /etc/wsl.conf

按字母 i (进入内容插入模式)并粘贴内容:

[boot]
systemd = true

编辑完成后,按 Esc ,然后按 : 输入命令 wq (保存并退出),然后按 enter

每次进行此更改时,都需要在 DOS 或 PowerShell 中使用命令 wsl --shutdown 重新启动 WSL。

当我们激活 systemd 时,大多数情况下 Docker 会自动启动,因此如果 /etc/wsl.conf 中有 command = service docker start 行,请使用 # 对其进行注释,然后使用以下命令重新启动 WSL: wsl --shutdown 命令。

否则,您可以使用以下命令自动启动它:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

您必须使用 wsl --shutdown 命令重新启动 WSL 才能使更改生效。

准备好了,只需在 DOS 或 PowerShell 中使用 wsl --shutdown 命令重新启动 WSL 即可进行测试。再次打开WSL后,输入命令 docker ps 来评估该命令是否没有返回上面的消息: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

3 - 使用 Docker Desktop 安装 Docker#

下载以下链接:https://www.docker.com/products/docker-desktop/ 并安装 Docker Desktop。

单击 Docker icon near the clock -> Settings -> Settings at the top -> Resources -> WSL Integration.

勾选 Enable integration with my default WSL distro and 勾选 your Linux version.

七. WSL 2 的基本提示和技巧#

  • WSL 2 的性能在于在 Linux 中运行所有内容,因此请避免从 /mnt/c 路径运行带或不带 Docker 的项目,因为您将损失性能。
  • 要打开 WSL 终端,只需在“开始”菜单中键入发行版的名称或运行 C:\Windows\System32\wsl.exe
  • 可从 /mnt/c 访问 Windows 10/11 文件系统。
  • 您可以通过 Windows 网络访问 Linux 文件系统,在 Windows 资源管理器中键入 \\wsl$
  • 您可以通过键入命令 explorer.exe . 来访问 Windows 资源管理器中的文件夹。
  • 您可以通过键入命令 code . or code myfile.ext 使用 Visual Studio Code 打开文件夹或文件。
  • 令人难以置信的是,通过以 .exe 结尾运行 Windows 可执行文件,可以在 Linux 终端中访问它们(并不意味着它们能够正常工作)。
  • 可以使用 WSL 2 运行一些 Linux 图形应用程序。阅读本教程:https://medium.com/@dianaarnos/aplica%C3%A7%C3%B5es-gr%C3%A1ficas-no-wsl2-e0a481e9768c。
  • 使用 PowerShell 运行 wsl -l -v 命令以查看已安装的 Linux 版本及其当前状态(已停止或正在运行)。
  • 使用 PowerShell 运行 wsl --shutdown 命令来关闭当前正在运行的所有 Linux 发行版(当您运行该命令时,Docker 发行版也将被关闭,并且 Docker Desktop 将在时钟旁边显示一条通知,询问您是否想要再次启动他的发行版,如果您不接受,则必须使用 Windows 时钟旁边的图标再次启动 Docker)。
  • 使用 PowerShell 运行 wsl --t <distribution name> 命令以仅关闭特定的 Linux 发行版。
  • 如果您发现 WSL 2 消耗大量计算机资源,请在 WSL 2 终端中运行以下命令以释放 RAM:
echo 1 | sudo tee /proc/sys/vm/drop_caches
  • export DOCKER_BUILDKIT=1 添加到 Linux 用户的 .profile 文件末尾,以便在使用 Docker 构建时获得更高的性能。运行命令 source ~/.profile 将此环境变量加载到您的 WSL 2 环境中。
  • 在 Windows 11 中,可以自动启动 Docker,请参阅以下部分:Windows 11 提示

八. 疑虑#

WSL 2 是否可以与 VirtualBox 或 VMWare 等其他虚拟机一起工作?遵循参考

九. 想要了解如何在 Windows 上提高工作效率的提示吗?#

访问以下教程:

十. wsl2配置文件#

1. .wslconfig文件#

# Settings apply across all Linux distros running on WSL 2

[wsl2]
# 自定义 Linux 内核的绝对 Windows 路径。
# kernel=C:\\temp\\myCustomKernel
# 要分配给 WSL 2 VM 的内存量。
memory=50GB
# 要分配给 WSL 2 VM 的逻辑处理器数量。
processors=8
# 一个布尔值,用于指定绑定到 WSL 2 VM 中的通配符或 localhost 的端口是否应可通过 localhost:port 从主机连接。
localhostforwarding=true
# 其他内核命令行参数。在本例中启用较旧的 Linux基础映像,例如 Centos 6
kernelCommandLine=vsyscall=emulate
# 在“安全模式”中运行 WSL,这会禁用许多功能,应用于恢复处于错误状态的发行版。 仅适用于 Windows 11 和 WSL 版本 0.66.2+。
safeMode=false
# 要向 WSL 2 VM 添加的交换空间量,0 表示无交换文件。 交换存储是当内存需求超过硬件设备上的限制时使用的基于磁盘的 RAM。
swap=8GB
# 交换虚拟硬盘的绝对 Windows 路径。默认为%USERPROFILE%\AppData\Local\Temp\swap.vhdx 
swapfile=D:\\temp\\wsl-swap.vhdx
# 默认的 true 设置使 Windows 能够回收分配给 WSL 2 虚拟机的未使用内存。
pageReporting=true
# 一个布尔值,用于在 WSL 中打开或关闭对 GUI 应用程序 (WSLg) 的支持。 仅适用于 Windows 11。
guiApplications=true
# 一个布尔值,用于在 WSL 2 发行版实例启动时打开显示 dmesg 内容的输出控制台窗口。 仅适用于 Windows 11。
debugConsole=false
# 用于打开或关闭嵌套虚拟化的布尔值,使其他嵌套 VM 能够在 WSL 2 中运行。 仅适用于 Windows 11。
nestedVirtualization=true
# VM 在关闭之前处于空闲状态的毫秒数。 仅适用于 Windows 11。
vmIdleTimeout=60000
# 如果值为 mirrored,则会启用镜像网络模式。 默认或无法识别的字符串会生成 NAT 网络。
networkingMode=mirrored
# 如果设置为 true,则 Windows 防火墙规则以及特定于 Hyper-V 流量的规则可以筛选 WSL 网络流量。
firewal=true
# 更改将 DNS 请求从 WSL 代理到 Windows 的方式
dnsTunneling=false
# 强制 WSL 使用 Windows 的 HTTP 代理信息
autoProxy=true
# 实验设置
[experimental]
# 检测空闲 CPU 使用率后,自动释放缓存的内存。 设置为 gradual 以慢速释放,设置为 dropcache 以立即释放缓存的内存。
autoMemoryReclaim=gradual
# 自动清理磁盘空间 如果设置为 true,则任何新创建的 VHD 将自动设置为稀疏。
sparseVhd=false
# 仅当 wsl2.dnsTunneling 设置为 true 时才适用。 如果此选项设置为 false,则从 Linux 隧道传输的 DNS 请求将绕过 Windows 中的缓存名称,以始终将请求放在网络上。
useWindowsDnsCache=false
# 仅当 wsl2.dnsTunneling 设置为 true 时才适用。 如果设置为 true,Windows 将从 DNS 请求中提取问题并尝试解决该问题,从而忽略未知记录。
bestEffortDnsParsing=false
# 仅当 wsl2.autoProxy 设置为 true 时才适用。 配置启动 WSL 容器时,WSL 等待检索 HTTP 代理信息的时长(以毫秒为单位)。 如果代理设置在此时间之后解析,则必须重启 WSL 实例才能使用检索到的代理设置。
initialAutoProxyTimeout=1000
# 仅当 wsl2.networkingMode 设置为 mirrored 时才适用。 指定 Linux 应用程序可以绑定到哪些端口(即使该端口已在 Windows 中使用)。 通过此设置,应用程序能够仅侦听 Linux 中的流量端口,因此即使该端口在 Windows 上用于其他用途,这些应用程序也不会被阻止。 例如,WSL 将允许绑定到 Linux for Docker Desktop 中的端口 53,因为它只侦听来自 Linux 容器中的请求。 应在逗号分隔列表中设置格式,例如:3000,9000,9090
ignoredPorts=null
# 仅当 wsl2.networkingMode 设置为 mirrored 时才适用。 如果设置为 True,将会允许容器通过分配给主机的 IP 地址连接到主机,或允许主机通过此方式连接到容器。 请注意,始终可以使用 127.0.0.1 环回地址 - 此选项也允许使用所有额外分配的本地 IP 地址。
hostAddressLoopback=true

具有 path 值的条目必须是带有转义反斜杠的 Windows 路径,例如: C:\\Temp\\myCustomKernel

具有 size 值的条目必须是大小后跟单位,例如 8GB512MB

值类型后带 * 的条目仅在 Windows 11 上可用。

值类型后面带有 ** 的条目需要 Windows 版本 22H2 或更高版本。

2. wsl.conf文件#

# 自动装载设置
[automount]

# true 导致固定驱动器(即 C:/ 或 D:/)自动装载到 DrvFs 中的 /mnt 下。 false 表示驱动器不会自动装载,但你仍可以手动或通过 fstab 装载驱动器。
enabled = true

# 设置固定驱动器要自动装载到的目录。 默认情况下,此项设置为 /mnt/,因此 Windows 文件系统 C 驱动器会装载到 /mnt/c/。 如果将 /mnt/ 更改为 /windir/,则你应会看到固定的 C 驱动器装载到 /windir/c。
root = /mnt/

# 下面列出了自动装载选项值,它们追加到了默认的 DrvFs 装载选项字符串中。 只能指定特定于 DrvFs 的选项。  metadata 是否将元数据添加到 Windows 文件以支持 Linux 系统权限; uid 用于所有文件的所有者的用户 ID,WSL 发行版的默认用户 ID(首次安装时,此项默认为 1000); gid 用于所有文件的所有者的组 ID,WSL 发行版的默认组 ID(首次安装时,此项默认为 1000);umask:要对所有文件和目录排除的权限的八进制掩码 fmask:要对所有文件排除的权限的八进制掩码 dmask:要对所有目录排除的权限的八进制掩码;case 确定被视为区分大小写的目录以及使用 WSL 创建的新目录是否将设置标志。 有关选项的详细说明,请参阅区分大小写。 选项包括 off、dir 或 force。 dmask=022:目录权限 = 777 - 022 = 755,即 rwxr-xr-x  fmask=133:文件权限 = 777 - 133 = 644,即 rw-r--r--
options = "metadata=disabled,uid=1003,gid=1003,dmask=022,fmask=133,case=off"

# true 设置启动 WSL 时要处理的 /etc/fstab。 /etc/fstab 是可在其中声明其他文件系统的文件,类似于 SMB 共享。 因此,在启动时,可以在 WSL 中自动装载这些文件系统。
mountFsTab = true

# 网络设置  更改主机名,将generateHosts 设置为 false,防止 WSL 自动生成 /etc/hosts 的默认行为,并将generateResolvConf 设置为 false,防止 WSL 自动生成生成 /etc/resolv.conf,您可以创建自己的(即名称服务器 1.1.1.1)。
[network]
# 设置要用于 WSL 发行版的主机名。
hostname = kangshiyi
# 生成 /etc/hosts  true 将 WSL 设置为生成 /etc/hosts。 hosts 文件包含主机名对应的 IP 地址的静态映射。
generateHosts = true
# 生成 /etc/resolv.conf  true 将 WSL 设置为生成 /etc/resolv.conf。 resolv.conf 包含能够将给定主机名解析为其 IP 地址的 DNS 列表。
generateResolvConf = true

# 互操作设置,例如启动 Windows 应用程序和添加路径变量。将这些设置为 false 将阻止 Windows 进程的启动并阻止添加 $PATH 环境变量。
[interop]
# 设置此键可确定 WSL 是否支持启动 Windows 进程。
enabled = true
# 设置此键可确定 WSL 是否会将 Windows 路径元素添加到 $PATH 环境变量。
appendWindowsPath = true

# 用户设置。
[user]
# 设置此键指定在首次启动 WSL 会话时以哪个用户身份运行。
default = root

# 启动设置 设置在新 WSL 实例启动时运行的命令。此示例启动 Docker 容器服务。
[boot]
# 你希望在 WSL 实例启动时运行的命令字符串。 此命令以根用户身份运行。 例如 service docker start。
#command = service docker start
# 配置了systemd = true,就不用配置 command = service docker start 了,如果配置了就重复了,docker就起不来了
systemd = true

3. daemon.json文件#

背景#

docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json

一般情况,配置文件 daemon.json中配置的项目参数,在启动参数中同样适用,有些可能不一样(具体可以查看官方文档),但需要注意的一点,配置文件中如果已经有某个配置项,则无法在启动参数中增加,会出现冲突的错误。

如果在daemon.json文件中进行配置,需要docker版本高于1.12.6(在这个版本上不生效,1.13.1以上是生效的)

参数#

daemon.json文件可配置的参数表,我们在配置的过程中,只需要设置我们需要的参数即可,不必全部写出来。详细参考官网。

官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#/configuration-reloading。

官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#options

官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#/linux-configuration-file

配置示例:

{
 #镜像源管理,我增加了阿里镜像源,可以提速 
"registry-mirrors" : [
    "https://jkfdsf2u.mirror.aliyuncs.com",
    "https://registry.docker-cn.com"
  ],
#docker私服配置,因为不是https链接,所以在此配置
  "insecure-registries" : [
    "docker-registry.zjq.com"
  ],
#日志最大存储限制,如果不配置它,可能会导致/var/lib/docker/tmp/containers目录中的容器日志过大,挤占系统盘空间。
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "10"
  },
#Docker运行时使用的根路径,默认 "/var/lib/docker"
  "data-root": "/data/docker"
}

4. /etc/hosts 文件#

作用:提高域名的解析速度。由于有了映射关系,当我们输入域名后,计算机就能够快速解析出 IP 地址,而不用请求网络上的 DNS 服务器。

5. resolv.conf 文件#

/etc/resolv.conf#

resolv.conf 是 DNS 域名解析的配置文件。每行都会以一个关键字开头,然后跟配置参数。

  • nameserver #定义 DNS 服务器的 IP 地址
  • search #定义域名的搜索列表,当查询的域名中包含的 . 的数量少于 options.ndots 的值时,会依次匹配列表中的每个值
  • options #定义域名查找时的配置信息

6. wsl修改root密码#

[win10 wsl 修改root密码 - CSDN文库](https://wenku.csdn.net/answer/5mhntp9mud#:~:text=wsl设置root密码 1 打开WSL终端。 2 使用以下命令切换到root用户: sudo su 3,4 现在,您可以使用以下命令设置root密码: passwd 5 您将被要求输入新的root密码。 输入并确认密码。 6 设置完成后,即可使用新设置的root密码来执行特权操作。)

WSL2快速指南
https://blog.2231258.xyz/posts/-tool/wsl2/wsl2快速指南/
作者
康十一
发布于
2024-11-28
许可协议
CC BY-NC-SA 4.0