设置WSL2(Ubuntu 18.04 LTS)并使用Docker(在Ubuntu上)和GUI应用程序


介绍

自从WSL2进入Insider Preview以来,我就一直在使用WSL2进行业务开发,但是它将很快正式发布,并且由于内部使用它的人数正在增加,我将写一篇文章,其中包括组织知识。

我想念本地主机,依此类推...

WSL2

关于WSL2

一种允许Linux在Windows的Windows子系统上运行的技术。
与WSL1不同,它是使用VM(Hyper-V)实现的。但是,与普通VM不同,它具有高速启动,Windows和Linux之间协作以及无需VM管理的优点。

已启用WSL

让我们通过参考

文档进行设置。

1
2
3
4
5
6
7
8
# Windows Subsystem for Linuxのインストール
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 仮想マシンプラットフォームの有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 再起動後、wslコマンドが利用可能になるはずなのでWSLのデフォルトバージョンを2に設定
wsl --set-default-version 2

操作系统选择

从Microsoft Store或Internet获取WSL的图像。

令人敬畏的WSL支持的发行版

我觉得本文中介绍的Ubuntu 18.04 LTS具有很多当前信息。似乎Ubuntu 20.04LTS也已发布到商店。

就个人而言,它是非官方的,但是我想推荐它,因为ArchWSL运作良好,并且在开发它时没有很多麻烦。

WSL配置(.wslconfig)

您可以在

C:\\User\ユーザー名\.wslconfig中写入wsl2设置。

我有内存限制,已启用SWAP。

对于

设置项目,我认为"管理Linux发行版"已详细说明。

1
2
3
[wsl2]
memory=8G
swap=4G

Windows终端

由Microsoft开发的终端,与WSL2的发布同时发布。我们正在以某种方式开发以替换现有的内置终端...

在预览版本发布后,立即出现了许多错误,例如突然崩溃和显示崩溃,但是现在它已经发布,它是稳定的。

绘图又快又漂亮,因此处理诸如Vim之类的丰富CUI程序非常舒适。
它与PowerShell,WSL和Azure具有高度的亲和力,并且添加WSL发行版非常方便,因为它未经许可就添加了启动选项。

我的设置将默认配置文件设置为Ubuntu,配色方案个人使用铁板吸血鬼。

我还设置了

窗格拆分,但是我使用的是tmux,所以我用的不多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
            "fontFace": "Hackgen Console",
            "fontSize": 14,
            "colorScheme": "Dracula"
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "commandline": "wsl ~ -d Ubuntu"
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            },
            {
                "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
                "hidden": false,
                "name": "Arch",
                "source": "Windows.Terminal.Wsl"
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [
        // 個人的に
        {
            "name" : "Dracula",
            "background" : "#282A36",
            "black" : "#21222C",
            "blue" : "#BD93F9",
            "brightBlack" : "#6272A4",
            "brightBlue" : "#D6ACFF",
            "brightCyan" : "#A4FFFF",
            "brightGreen" : "#69FF94",
            "brightPurple" : "#FF92DF",
            "brightRed" : "#FF6E6E",
            "brightWhite" : "#FFFFFF",
            "brightYellow" : "#FFFFA5",
            "cyan" : "#8BE9FD",
            "foreground" : "#F8F8F2",
            "green" : "#50FA7B",
            "purple" : "#FF79C6",
            "red" : "#FF5555",
            "white" : "#F8F8F2",
            "yellow" : "#F1FA8C"
        }
    ],

    "keybindings": [
        // ペイン分割と移動。Vim風にしています。
        { "command": { "action": "splitPane", "split": "vertical" }, "keys": "ctrl+shift+e" },
        { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "ctrl+shift+d" },
        { "command": { "action": "splitPane", "split": "auto" }, "keys": "alt+shift+|" },
        { "command": { "action": "moveFocus", "direction": "down" }, "keys": "ctrl+shift+j" },
        { "command": { "action": "moveFocus", "direction": "left" }, "keys": "ctrl+shift+h" },
        { "command": { "action": "moveFocus", "direction": "right" }, "keys": "ctrl+shift+l" },
        { "command": { "action": "moveFocus", "direction": "up" }, "keys": "ctrl+shift+k" }
    ]
}

VSCode远程开发

这是一个Suguremono,可以在指定的连接目标位置打开VS Code。它涵盖了SSH,Docker和WSL。

只需将Remote Development Extension Pack插入VS Code,就可以完成。

登录到WSL终端,然后

1
code .

只需运行

在WSL中打开目录。方便的。

Ubuntu18.04 LTS(20.04 LTS)

设置Docker

systemd

Systemd越来越依赖于最新的Linux发行版,但是WSL上的Linux被禁用,因为它使用了Microsoft自己的Linux内核。

当然,您可以不使用systemd进行开发,但是由于自动启动有点麻烦,因此我介绍了genie(将在以后描述)来运行systemd。

genie

https://github.com/arkane-systems/geni

使用wsl启动systemd的便捷工具。

因为您需要dotnet运行时,所以请遵循指南

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 18.04
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-5.0

# 20.04 LTS
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-5.0

设置dotnet运行时后,请按照sprite安装说明进行操作

1
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash

执行以下命令以安装systemd-genie

1
2
sudo apt update
sudo apt install systemd-genie

这样就完成了sprite设置,在外壳上

1
2
3
4
5
6
7
8
# Ubuntu 18.04 LTS用
genie -c bash

# Arch等々
genie -s

# systemd起動確認
sudo systemctl status

通过执行

,将启动新的shell并可以启动systemd。

某些服务已失败,但是到目前为止开发还没有问题。我感到不舒服,所以我希望有一天能解决它。

问题

停止在genie 1.31或更高版本中的"正在等待systemd .... !!"

https://github.com/arkane-systems/genie#warning-timing-out中所述,其行为是等待所有系统服务正常启动,但到目前为止,在已设置的环境中服务将被阻止,因为它们将无法启动。等待几秒钟后,可以再次按Ctrl C和genie -s登录到有权访问systemd的shell。

登录后,停止启动失败的服务。需要时再考虑。

1
2
3
4
5
6
# 以下のコマンドで失敗しているサービスを一覧できます
sudo systemctl list-units --state failed

# 筆者の環境で失敗していたサービスたち
sudo systemctl mask systemd-remount-fs.service
sudo systemctl disable ssh.service multipathd.service multipathd.socket

Docker

我们将根据官方指南进行操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io

sudo gpasswd -a $USER docker

# 再ログイン後

docker run hello-world

# docker-compose
sudo apt install python3-pip
pip3 install -U docker-compose

docker-compose -v

使用GUI应用程序

最近与Web相关的开发仅需要Docker和VS Code,但是使用诸如Cypress之类的浏览器的测试工具具有Headless模式,但是无法使用GUI的开发却很困难。
因此,我在Windows端设置了X Server,以便可以通过WSL启动GUI。

X服务器

X410

Microsoft Store

我正在收费使用。一旦设置了防火墙,这很容易,因为仅通过启动应用程序即可将其驻留在未经许可的情况下。
操作也相当稳定。

VcXsrv

SourceForge

单击此处以获取大量用户和信息。免费。

启动设置中的

  • 显示设置

    • 多个Windows(可选)
  • 新客户

    • 没有客户
  • 额外设定

    • 剪贴板:真
    • 本机opengl:true
    • 禁用访问控制:false
    • VcXsrv的附加参数

      • -ac

建议使用

进行设置。

###常见
两者都很常见,但控制面板-