一. 什么是 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 家庭版或专业版
版本 2004 或更高版本(内部版本 19041 或更高版本)。
旧版本需要手动安装 WSL 2。请参阅教程 https://learn.microsoft.com/en-us/windows/wsl/install-manual。
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 主题以及一些快捷方式。
要覆盖设置,请访问设置菜单并单击“打开设置 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 的人,我们有两个选择
- 卸载 Docker 桌面。
- 在 Windows 服务中禁用 Docker 桌面服务。此选项允许您在必要时使用 Docker Desktop,对于大多数用户,建议卸载 Docker Desktop。如果您选择第二个选项,则需要删除 ~/.docker/config.json 文件并使用“docker login”命令再次向 Docker 进行身份验证
如果您需要将 Docker 与 VSCode 以外的其他 IDE 集成
VSCode 已经通过远程 WSL 或远程容器扩展以这种方式与 WSL 上的 Docker 集成。
您必须启用通过 TCP 与 Docker 服务器的连接。让我们完成以下步骤:
- 创建文件 /etc/docker/daemon.json:
sudo echo '{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}' > /etc/docker/daemon.json
- 重启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 支持 systemd
。 systemd
是一个初始化和服务管理系统,广泛应用于现代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 上提高工作效率的提示吗?
访问以下教程:
- 生产性开发环境配置:https://github.com/argentinaluiz/ambiente-dev-produtivo
- 如何在 VSCode 中设置高效环境:https://github.com/argentinaluiz/my-vscode-settings
十. 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
值的条目必须是大小后跟单位,例如 8GB
或 512MB
。
值类型后带 * 的条目仅在 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密码来执行特权操作。)