win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker

0x01 安装wsl2

官方安装指南

自动安装 适合2004及以上版本

手动安装 适合1903或1909及以上版本

简介

如果您想在最新的Windows版本中试用经过改进的WSL2(Windows Subsystem for Linux 2),请按照以下方法操作,我们在这篇文章中涵盖了安装它所需做的一切。

WSL 2是对微软在2017年推出的WSL原始版本的重大升级。WSL2不仅仅是一个版本升级。不经更快、更多功能,并且使用了真正的Linux内核。未来的Linux内核更新甚至会以Windows 10软件更新的形式发布,想想看,这是不是有点疯狂!

微软创建WSL 2的目标是提高性能。做到这一点的最佳方法是什么?添加完全的系统调用兼容性,即以真正的Linux内核为核心。

如果您无法升级,也不要着急。因为在2020年8月,Microsoft将WSL 2反向移植到Windows 10的较早版本。任何使用1903或1909版本的人也可以安装WSL 2——但必须先安装Windows Update KB4566116。

追求完美的Windows用户还可以强制安装Windows 10 2020 年 5 月更新,请记住,如果您按照这种方法操作,可能会遇到缺少的驱动程序,GUI故障或其他硬件故障。

从技术上讲,您可以在Windows 10 build 18917或更高版本的“内部”版本上安装WSL 2。我不太熟悉“内部”构建系统是如何工作的,所以请注意,这篇文章的其余部分是基于在Windows的稳定版本上使用该特性。

您的计算机还需要支持Hyper-V虚拟化才能运行WSL2。你可以检查你的Hyper-V支持。

安装WSL 2前一定要首先开启VT(Intel Virtuallization Technology)功能!!!

如果您不能同时满足这两个要求,则无法安装或启用WSL 2,但可以使用WSL 1。

在Windows 10上安装WSL 2的过程如下:

  1. 启用WSL 2
  2. 启用“虚拟机平台”
  3. 将WSL2设置为默认值
  4. 安装Linux发行版

我将依次使用PowerShell应用程序逐步完成每个步骤,您需要以管理员身份运行该应用程序。您可以在Windows“开始”菜单中找到PowerShell。

注意:也可以使用GUI安装WSL 1,但是使用命令行的速度要快得多,并且由于WSL是CLI工具,因此这样做也很有意义吧!

安装过程

第一步:启用WSL

无论您要使用哪个版本的WSL,都首先需要启用它。使用管理员打开PowerShell工具,输入以下指令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

只想使用WSL 1?那就跳至第四步。

第二步:启用“虚拟机平台”

WSL 2需要启用Windows 10的“虚拟机平台”功能。计算机需要虚拟化功能才能使用此功能。这是与Hyper-V分开的,并提供了一些新的适用于 Linux 的 Windows 子系统中可用的更有趣的平台集成。

要在Windows 10(2004)上启用虚拟机平台,请以管理员身份打开PowerShell并运行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 

要在Windows 10(1903,1909)上启用虚拟机平台,请以管理员身份打开PowerShell并运行:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart 

为了确保所有相关的部分都能到位,您应该在此时重新启动系统,否则您可能会发现事情并没有按照预期工作。

第三步:将WSL2设置为默认值

以管理员身份打开PowerShell,然后运行以下命令以将WSL 2设置为WSL的默认版本:

wsl --set-default-version 2

这里可能会提示

- WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel

image-20220306074914407

需要从微软下载WSL2 Linux内核的升级包

下载地址为:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第1张图片

第四步:安装发行版

有了WSL和必要的虚拟化技术之后,您要做的就是从Microsoft Store中选择并安装Linux发行版。

提供了几种不同的发行版,包括OpenSUSE,Pengwin,Fedora Remix和Alpine Linux。但是我个人的建议是Ubuntu 20.04 LTS(尽管也有18.04 LTS和16.04 LTS可用)。

要在Windows 10上安装Ubuntu,请打开Microsoft Store应用,搜索“ Ubuntu 20.04”,然后单击“获取”按钮:

如果无法直接搜索到,可以打开以下网址,点击获取后跳转到Microsoft Store应用

https://www.microsoft.com/zh-cn/p/ubuntu-2004/9n6svws3rx71?rtc=1&activetab=pivot:overviewtab

此时会遇到所在地区不支持通过Microsoft.com购买的问题

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第2张图片

点击设置 > 时间和语言 > 区域设置为美国

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第3张图片

此时即可以进行安装

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第4张图片

完成后点击Ubuntu即可进入,第一次进入需要设置用户名和密码

wsl下的Ubuntu自动下载了部分软件,例如Python等

也可以通过lsb_release -a查看Ubuntu的版本信息

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第5张图片

0x02 Terminal安装

安装

  • Win10下可以在应用商店中安装,安装过程与安装Ubuntu类似

  • Win11自带Terminal终端

配置

直接点击设置后可以对终端样式进行配置,本质上就是通过settings.json文件对各部分内容进行配置

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第6张图片

打开该配置文件下拉可以找到

    // Add custom color schemes to this array.
    // To learn more about color schemes, visit https://aka.ms/terminal-color-schemes
    // To find color-schemes: https://windowsterminalthemes.dev/
    "schemes": [
    ]

schemas中可以添加各种主题,例如

    // Add custom color schemes to this array.
    // To learn more about color schemes, visit https://aka.ms/terminal-color-schemes
    // To find color-schemes: https://windowsterminalthemes.dev/
    "schemes": [
        {
            "name": "Atom",
            "black": "#000000",
            "red": "#fd5ff1",
            "green": "#87c38a",
            "yellow": "#ffd7b1",
            "blue": "#85befd",
            "purple": "#b9b6fc",
            "cyan": "#85befd",
            "white": "#e0e0e0",
            "brightBlack": "#000000",
            "brightRed": "#fd5ff1",
            "brightGreen": "#94fa36",
            "brightYellow": "#f5ffa8",
            "brightBlue": "#96cbfe",
            "brightPurple": "#b9b6fc",
            "brightCyan": "#85befd",
            "brightWhite": "#e0e0e0",
            "background": "#161719",
            "foreground": "#c5c8c6",
            "selectionBackground": "#444444",
            "cursorColor": "#d0d0d0"
        },
        {
            "name": "CyberPunk2077",
            "black": "#272932",
            "red": "#710000",
            "green": "#1AC5B0",
            "yellow": "#FDF500",
            "blue": "#9381FF",
            "purple": "#742D8B",
            "cyan": "#00D0DB",
            "white": "#D1C5C0",
            "brightBlack": "#7b8097",
            "brightRed": "#C71515",
            "brightGreen": "#40FFE9",
            "brightYellow": "#fff955",
            "brightBlue": "#37EBF3",
            "brightPurple": "#CB1DCD",
            "brightCyan": "#37EBF3",
            "brightWhite": "#C1DEFF",
            "background": "#272932",
            "foreground": "#E455AE",
            "selectionBackground": "#742D8B",
            "cursorColor": "#FDF500"
        },
        {
            "name": "Flatland",
            "black": "#272932",
            "red": "#f18339",
            "green": "#9fd364",
            "yellow": "#f4ef6d",
            "blue": "#5096be",
            "purple": "#695abc",
            "cyan": "#d63865",
            "white": "#ffffff",
            "brightBlack": "#7b8097",
            "brightRed": "#d22a24",
            "brightGreen": "#a7d42c",
            "brightYellow": "#ff8949",
            "brightBlue": "#61b9d0",
            "brightPurple": "#695abc",
            "brightCyan": "#d63865",
            "brightWhite": "#ffffff",
            "background": "#1d1f21",
            "foreground": "#b8dbef",
            "selectionBackground": "#2b2a24",
            "cursorColor": "#708284"
        }
    ]

主题样式可以在下面网站中寻找,找到后直接复制到schemes中即可

https://windowsterminalthemes.dev/

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第7张图片

如果需要引用则在 profileslists 的相关主题中进行引用,例如powershell中使用Flatland主题

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第8张图片

下面是一个完整的配置文件案例

// This file was initially generated by Windows Terminal 1.6.10571.0
// It should still be usable in newer versions, but newer versions might have additional
// settings, help text, or changes that you will not see unless you clear this file
// and let us generate a new one for you.
 
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
    "$schema": "https://aka.ms/terminal-profiles-schema",
 
    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
 
    // You can add more global application settings here.
    // To learn more about global settings, visit https://aka.ms/terminal-global-settings
 
    // If enabled, selections are automatically copied to your clipboard.
    "copyOnSelect": false,
 
    // If enabled, formatted data is also copied to your clipboard
    "copyFormatting": false,
 
    // A profile specifies a command to execute paired with information about how it should look and feel.
    // Each one of them will appear in the 'New Tab' dropdown,
    //   and can be invoked from the commandline with `wt.exe -p xxx`
    // To learn more about profiles, visit https://aka.ms/terminal-profile-settings
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile.
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "colorScheme": "Flatland",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile.
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "命令提示符",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            },
            {
                "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
                "hidden": false,
                "name": "Ubuntu-20.04",
                "source": "Windows.Terminal.Wsl"
            }
        ]
    },
 
    // Add custom color schemes to this array.
    // To learn more about color schemes, visit https://aka.ms/terminal-color-schemes
    // To find color-schemes: https://windowsterminalthemes.dev/
    "schemes": [
        {
            "name": "Atom",
            "black": "#000000",
            "red": "#fd5ff1",
            "green": "#87c38a",
            "yellow": "#ffd7b1",
            "blue": "#85befd",
            "purple": "#b9b6fc",
            "cyan": "#85befd",
            "white": "#e0e0e0",
            "brightBlack": "#000000",
            "brightRed": "#fd5ff1",
            "brightGreen": "#94fa36",
            "brightYellow": "#f5ffa8",
            "brightBlue": "#96cbfe",
            "brightPurple": "#b9b6fc",
            "brightCyan": "#85befd",
            "brightWhite": "#e0e0e0",
            "background": "#161719",
            "foreground": "#c5c8c6",
            "selectionBackground": "#444444",
            "cursorColor": "#d0d0d0"
        },
        {
            "name": "CyberPunk2077",
            "black": "#272932",
            "red": "#710000",
            "green": "#1AC5B0",
            "yellow": "#FDF500",
            "blue": "#9381FF",
            "purple": "#742D8B",
            "cyan": "#00D0DB",
            "white": "#D1C5C0",
            "brightBlack": "#7b8097",
            "brightRed": "#C71515",
            "brightGreen": "#40FFE9",
            "brightYellow": "#fff955",
            "brightBlue": "#37EBF3",
            "brightPurple": "#CB1DCD",
            "brightCyan": "#37EBF3",
            "brightWhite": "#C1DEFF",
            "background": "#272932",
            "foreground": "#E455AE",
            "selectionBackground": "#742D8B",
            "cursorColor": "#FDF500"
        },
        {
            "name": "Flatland",
            "black": "#272932",
            "red": "#f18339",
            "green": "#9fd364",
            "yellow": "#f4ef6d",
            "blue": "#5096be",
            "purple": "#695abc",
            "cyan": "#d63865",
            "white": "#ffffff",
            "brightBlack": "#7b8097",
            "brightRed": "#d22a24",
            "brightGreen": "#a7d42c",
            "brightYellow": "#ff8949",
            "brightBlue": "#61b9d0",
            "brightPurple": "#695abc",
            "brightCyan": "#d63865",
            "brightWhite": "#ffffff",
            "background": "#1d1f21",
            "foreground": "#b8dbef",
            "selectionBackground": "#2b2a24",
            "cursorColor": "#708284"
        }
    ],
 
    // Add custom actions and keybindings to this array.
    // To unbind a key combination from your defaults.json, set the command to "unbound".
    // To learn more about actions and keybindings, visit https://aka.ms/terminal-keybindings
    "actions":
    [
        // Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json.
        // These two lines additionally bind them to Ctrl+C and Ctrl+V.
        // To learn more about selection, visit https://aka.ms/terminal-selection
        { "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
        { "command": "paste", "keys": "ctrl+v" },
 
        // Press Ctrl+Shift+F to open the search box
        { "command": "find", "keys": "ctrl+shift+f" },
 
        // Press Alt+Shift+D to open a new pane.
        // - "split": "auto" makes this pane open in the direction that provides the most surface area.
        // - "splitMode": "duplicate" makes the new pane use the focused pane's profile.
        // To learn more about panes, visit https://aka.ms/terminal-panes
        { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }
    ]
}

0x03 WSL Ubuntu基本操作

Terminal打开Ubuntu

Terminal下直接有Ubuntu-20.04,选中即可

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第9张图片

设置root账户密码

默认的wsl没有设置root密码,需要通过管理员方法来设置root密码

sudo passwd root

效果如下

ysp@DESKTOP-M8DDPVJ:~$ sudo  passwd root
[sudo] password for ysp:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
ysp@DESKTOP-M8DDPVJ:~$ su root
Password:
root@DESKTOP-M8DDPVJ:/home/ysp# clear
root@DESKTOP-M8DDPVJ:/home/ysp#

配置用户sudo免密

由于默认情况下我们不知道 root 用户的密码,所以如果我们想要使用 root 用户的话可以使用按照上一步的命令为 root 用户设置一个新的密码,同时为了避免sudo切换root是需要输入密码,把自己配置的用户名加到sudo免密中,可以在root账户下输入如下命令:

# root账户下执行以下指令,替换leap为自己单独配置的用户名
sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers

更换ubuntu的apt安装源

默认的安装源相对国内很慢,我们更换源到阿里云,登录到ubuntu后使用root账户执行如下操作:

cp /etc/apt/sources.list /etc/apt/sources.list.bak
 
echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted \
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted \
deb http://mirrors.aliyun.com/ubuntu/ focal universe \
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe \
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse \
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse \
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse \
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted \
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe \
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse">/etc/apt/sources.list

使用root账户执行更新:

apt update && apt upgrade -y

0x04 WSL Ubuntu安装docker

WSL Ubuntu下安装docker有两种方法,选择其中一种进行安装即可

原生linux安装docker方式

因为wsl2已经完整使用了linux内核了,此种方式和先前在linux虚拟机安装docker类似,步骤如下:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo service docker start

执行脚本安装过程中,脚本提示“建议使用Docker Desktop for windows”,20s内按Ctrl+C会退出安装,所以需要等待20s,另外此种方式需要访问外网。

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第10张图片

检查docker安装正常

# 检查dockerd进程启动
service docker status
ps aux|grep docker
# 检查拉取镜像等正常
docker pull busybox
docker images

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第11张图片

注意:不同于完全linux虚拟机方式,WLS2下通过apt install docker-ce命令安装的docker无法启动,因为WSL2方式的ubuntu里面没有systemd。上述官方get-docker.sh安装的docker,dockerd进程是用ubuntu传统的init方式而非systemd启动的。

Docker Desktop for windows方式

  • Docker 也专门开发了可以使用 WSL2 中的 Docker 守护进程的桌面管理程序, 打开 Docker Desktop WSL2 backend 页面,下载最新的 Docker Desktop for Windows 程序 ,建议下载stable版本。下载地址:

    https://www.docker.com/products/docker-desktop

  • 启动Docker Desktop for Windows,点击“设置”按钮,启用基于WSL2的引擎复选框(Use the WSL 2 based engine

    win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第12张图片

  • 在 Resources 的WSL Integration中设置要从哪个 WSL2 发行版中访问 Docker,如下图使用的是 Ubuntu。

    win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第13张图片

  • 重启 Docker desktop for Windows,重启完成后我们就可以在 WSL2里面使用 docker 命令了

    win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第14张图片

  • 在WSL2里面执行df -Th,会发现增加了一些新的与docker有关的挂载点。

    win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第15张图片

总结

  • WSL2下原生linux安装docker方式和完全linux虚拟机安装docker类似,区别在于WSL2下的linux不支持systemd
  • Docker Desktop for windows方式,其实质是利用docker的C/S架构,将windows模式下的docker对应docker.sock,docker客户端二进制和docker的数据目录挂载到WSL2里面的linux机器,在此linux机器下执行docker命令(docker命令为docker客户端),实质为客户端通过 挂载的/var/run/docker.sock文件与windows里面的dockerd服务端进程通信。如下图,我们在linux下重新启动linux下dockerd进程,linux模式下下载的busybox镜像又可以看到了,/var/run/docker.sock的时间戳也被更新了,此时客户端通过/var/run/docker.sock文件与linux下的dockerd服务端通信。
  • 要使用哪个模式下的docker,重启下该模式下的docker服务端即可,本质都是修改/var/run/docker.sock文件。理论可以同时使用,但是需要修改docker配置,通过-H参数增加dockerd的tcp监听,执行具体docker命令时指定dockerd监听的对应IP和端口即可。

0x05 WSL Docker使用MySQL

参考资料:https://www.runoob.com/docker/docker-install-mysql.html

查看可用的 MySQL 版本

访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 。

可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第16张图片

此外,我们还可以用 docker search mysql 命令来查看可用版本:

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第17张图片

拉取 MySQL 镜像

这里我们拉取官方的最新版本的镜像:

# 拉取最新版
$ docker pull mysql:latest
# 拉取8.0.18版本
$ docker pull mysql:8.0.18

查看本地镜像

使用以下命令来查看是否已安装了 mysql:

$ docker images

image-20220307021718435

运行容器

安装完成后,我们可以使用以下命令来运行 mysql 容器:

$ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123321 mysql:8.0.18

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务
  • MYSQL_ROOT_PASSWORD=123321:设置 MySQL 服务 root 用户的密码

如果宿主机3306端口已经被占用,可以指定映射到其他端口号

# 将docker的mysql容器的3306号端口映射到宿主机的13306号端口上
$ docker run -itd --name mysql-test -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123321 mysql:8.0.18

通过 docker ps -a 查看容器运行情况

image-20220307022844126

停止容器

可以使用docker stop停止容器

$ docker stop 54de45a8a175

此时的状态为Exited

image-20220307023320217

再次启动容器

使用docker start停止容器

$ docker start 54de45a8a175

此时状态再次切换为上线

image-20220307023448611

进入容器

# 进入容器
$ docker exec -it 54de bash
# 退出容器
exit

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第18张图片

0x06 WSL Docker使用Redis

拉取 Redis 镜像

这里我们拉取官方的最新版本的镜像:

$ docker pull redis:latest

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第19张图片

查看本地镜像

使用以下命令来查看是否已安装了 redis:

$ docker images

image-20220308145459388

运行容器

安装完成后,我们可以使用以下命令来运行 redis 容器:

$ docker run -itd --name redis-test -p 6379:6379 redis

参数说明:

  • -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。
  • 外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

image-20220308145700018

接着我们通过 redis-cli 连接测试使用 redis 服务。

$ docker exec -it redis-test /bin/bash

image-20220308145731323

0x07 WSL Docker使用Mongo

拉取 Mongo 镜像

拉取 4.4.12 版的MongoDB

$ docker pull mongo:4.4.12

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第20张图片

查看本地镜像

使用以下命令来查看是否已安装了 mongo:

$ docker images

image-20220308151530578

运行容器

安装完成后,我们可以使用以下命令来运行 mongo 容器:

$ docker run -itd --name mongo-test -p 27017:27017 mongo:4.4.12 --auth

参数说明:

  • -p 27017:27017:映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  • –auth:需要密码才能访问容器服务。

安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第21张图片

接着使用以下命令添加用户和设置密码,并且尝试连接

$ docker exec -it mongo-test mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
>  db.createUser({ user:'admin',pwd:'123321',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123321')

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第22张图片

此时也可以通过可视化客户端进行连接(以navicat15为例)

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第23张图片

0x08 WSL Ubuntu安装PIP

参考资料:https://linuxize.com/post/how-to-install-pip-on-ubuntu-20.04/

Ubuntu已经自带python

image-20220308162642924

使用以下指令可以安装pip

# 更新apt
$ sudo apt update
# 安装python3-pip
$ sudo apt install python3-pip

image-20220308162848827

使用 pip3 --version 可以查看pip3的版本

image-20220308162915608

0x09 systemctl报错

wsl2中使用systemctl时会报如下错误

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

使用如下指令进行安装

sudo apt install python2
# 备份原有systemctl
sudo mv /usr/bin/systemctl /usr/bin/systemctl.old
# 下载,请耐心等待...
# 如果实在下载不下来可以直接访问网址获取该文件,然后拷贝为temp文件
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py >temp
sudo mv temp /usr/bin/systemctl
sudo chmod +x /usr/bin/systemctl

0x0a 与win10的数据互访

在Ubuntu系统下访问win10的home目录

win10系统挂载在mnt目录下

image-20220310140621455

通过cp可以将win10文件拷贝到wsl下或者将wsl内容拷贝到win10中

0x0b WSL Docker使用ES/Kibana

1.docker安装es

要使用es肯定是需要安装的,由于用惯了docker,所以也想在docker上尝试一下,主要是因为我的好多软件都以及选择了docker。docker安装其实是很简单的,至于要一行命令即可。这里我选择的是es的7.2.0版本镜像镜像安装,具体安装命令如下:

docker pull elasticsearch:7.2.0

敲完命令以后回车,只需要等带镜像下载完成就可以了。

1.1 启动es

安装完成以后当然需要去启动我们的es了,这里启动也是很方便的只需要一行命令即可。如下:

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.2.0

这样es就启动好了。我们可以去检查es是否安装完成,可以输入命令:

curl http://localhost:9200

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第24张图片

或者在浏览器中打开http://localhost:9200这个网址,如果能看到以下信息则说明我们的es是已经安装好了的。

{
  "name" : "530dd7820315",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "7O0fjpBJTkmn_axwmZX0RQ",
  "version" : {
    "number" : "7.2.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "508c38a",
    "build_date" : "2019-06-20T15:54:18.811730Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

如果你是在服务器上安装,想要对外访问还必须打开你服务器的9200端口,然后将localhost换成你服务器的ip地址即可。

1.2 修改配置,解决跨域访问问题

首先进入到容器中,然后进入到指定目录修改elasticsearch.yml文件。

docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/config/
vi elasticsearch.yml

elasticsearch.yml的文件末尾加上:

http.cors.enabled: true
http.cors.allow-origin: "*"

win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker_第25张图片

修改配置后重启容器即可。

docker restart elasticsearch

1.3 安装ik分词器

es自带的分词器对中文分词不是很友好,所以我们下载开源的IK分词器来解决这个问题。首先进入到plugins目录中下载分词器,下载完成后然后解压,再重启es即可。具体步骤如下:
**注意:**elasticsearch的版本和ik分词器的版本需要保持一致,不然在重启的时候会失败。可以在这查看所有版本,选择合适自己版本的右键复制链接地址即可。点击这里

cd /usr/share/elasticsearch/plugins/
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
exit
docker restart elasticsearch

然后可以在kibana界面的dev tools中验证是否安装成功;

POST test/_analyze
{
  "analyzer": "ik_max_word",
  "text": "你好我是东邪Jiafly"
}

不添加"analyzer": "ik_max_word",则是每个字分词,可以在下面kibana安装完成以后尝试一下。

2.kibana安装

2.1 docker安装kibana

同样适用docker安装kibana命令如下:

docker pull kibana:7.2.0

等待所有镜像下载完成即可。

2.2 启动kibana

安装完成以后需要启动kibana容器,使用--link连接到elasticsearch容器,命令如下:

docker run --name kibana --link=elasticsearch:test  -p 5601:5601 -d kibana:7.2.0
docker start kibana

启动以后可以打开浏览器输入http://localhost:5601就可以打开kibana的界面了。

0x0c WSL Ubuntu使用Clickhouse

拉取镜像

# 拉取镜像
$ docker pull yandex/clickhouse-server
# 登录docker,否则可能报如下错误
# repository does not exist or may require 'docker login': denied: requested access to the resource is denied
$ docker login
$ docker pull yandex/clickhouse-clinet

启动容器

# 直接运行,不加载数据卷
$ docker run -d --name ch-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 yandex/clickhouse-server
# 基于镜像创建容器运行(指定本地磁盘与容器目录的挂载映射)
# --volume=/home/zyx/dockerhome/clickhouse/clickhouse-test-db
$ docker run -d --name clickhouse-test-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 --volume=/home/zyx/dockerhome/clickhouse/clickhouse-test-db:/var/lib/clickhouse yandex/clickhouse-server

进入容器内部

# 1. 进入容器内部
$ docker exec -it clickhouse-test-server /bin/bash
 
# 2. 在容器内部,运行clickhouse-client
#   root@9e40ca366829:注意:这里已经是进入到了容器内部了.
root@9e40ca366829:/# clickhouse-client -m
ClickHouse client version 21.3.5.42 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.3.5 revision 54447.

你可能感兴趣的:(wsl,ubuntu,docker,linux)