「折腾」VSCode + wsl2 + Docker 探究

吐槽/反馈/建议:我的咸鱼心  爱发电-@wdssmq  FeedsPub-wdssmq

建议参考官方文档:

安装 WSL | Microsoft Docs:

https://docs.microsoft.com/zh-cn/windows/wsl/install

要点:

  • wsl --install命令将启用所需的可选组件,下载最新的 Linux 内核,将 WSL 2 设置为默认值,并安装 Linux 发行版
  • 可以使用 wsl --install -d <Distribution Name> 指定安装的 Linux 发行版,否则默认安装 Ubuntu;
  • wsl -l -o 命令可以查询可用 Linux 发行版列表;
# 查看可用列表
wsl -l -o

# 安装 Ubuntu-20.04
wsl --install -d Ubuntu-20.04

# 查看已安装
wsl -l -v

注:Debian 版本信息为 9.5 (stretch),好像不符合 Docker 的要求;

下边是我的踩坑记录,相当于分步安装,可以只安装 wsl2 功能自身而不安装 Linux 发行版,之后可以从备份中恢复;

安装 WSL:

  • 「程序和功能」→「启用或关闭 Windows 功能」
  • 勾选如下两项:
    • 「适用于 Linux 的 Windows 子系统」
    • 「虚拟机平台」
  • 确定并重启系统;

理论上也可以 PowerShell 中执行如下命令:

# 需要管理员权限,执行后也要先重启再安装内核更新
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

升级为 WSL 2:

访问:https://aka.ms/wsl2kernel

下载并安装对应内容中提供的「WSL2 Linux 内核更新包」;

遇到如下错误提示也意味着需要装这个更新包;

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

设置默认版本:

决定下一步将要安装的 Linux 发行版默认使用的 WSL 版本;

我一开始没执行这一步,但是好像可以再改;

wsl --set-default-version 2
# 设置 WSL 2 为默认;

安装 Linux 发行版:

  1. 直接通过「Microsoft Store」安装;← 点击链接会打开「Microsoft Store」应用内的一个列表页,但是包含的项目好像不全;
  2. 执行wsl -l -o
wsl -l -o
# 以下是可安装的有效分发的列表。
# 请使用“wsl --install -d <分发>”安装。

# NAME            FRIENDLY NAME
# Ubuntu          Ubuntu
# Debian          Debian GNU/Linux
# kali-linux      Kali Linux Rolling
# openSUSE-42     openSUSE Leap 42
# SLES-12         SUSE Linux Enterprise Server v12
# Ubuntu-16.04    Ubuntu 16.04 LTS
# Ubuntu-18.04    Ubuntu 18.04 LTS
# Ubuntu-20.04    Ubuntu 20.04 LTS

查看已安装 Linux 子系统:

wsl -l -v

NAME STATE VERSION
* Ubuntu-20.04 Running 1

备份和恢复:

# 从文件导入
mkdir -p /c/WSL
wsl --shutdown && wsl -l -v
echo $(date +%Y-%m-%d\ %H:%M)
wsl --import Ubuntu-20.04 "C:\WSL\Ubuntu-20.04" "D:\#bak\WSL\wsl-2023-02-06.tar"
echo $(date +%Y-%m-%d\ %H:%M)
# exit ← 把这一行也复制上,以保证上一行的时间能够输出

# 注:恢复后默认使用 root 连接,需要在额外修改用户;
cat /etc/wsl.conf
sudo su
sudo echo -e "[user]" >> /etc/wsl.conf
sudo echo -e "default = wdssmq" >> /etc/wsl.conf
su wdssmq
cat /etc/wsl.conf

# 备份打包
mkdir -p /c/WSL
wsl --shutdown && wsl -l -v
echo $(date '+%Y-%m-%d %H:%M')
wsl --export Ubuntu-20.04 "/c/WSL/wsl-$(date +%Y-%m-%d).tar"
echo $(date '+%Y-%m-%d %H:%M')
# exit ← 把这一行也复制上,以保证上一行的时间能够输出

其他:

  • wsl 内部可以用 /mnt/c/xxx 直接读写 Windows 下的内容;
  • Windows 可以使用 \\wsl$\Ubuntu-20.04\home\wdssmq 浏览 wsl 内文件;

修改已安装 Linux 子系统:

如果直接安装了 wsl2 则可以跳过这一步;

要在以前安装的 Linux 发行版上从 WSL 1 更新到 WSL 2,请使用命令 wsl --set-version <distro name> 2,将 <distro name> 替换为要更新的 Linux 发行版的名称。 例如,wsl --set-version Ubuntu-20.04 2 会将 Ubuntu 20.04 发行版设置为使用 WSL 2。

然而我第一次执行时提示如下:

wsl --set-version Ubuntu-20.04 2
# 正在进行转换,这可能需要几分钟时间...
# 有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
# WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel

所以需要安装上边说的「WSL2 Linux 内核更新包」,安装后再次执行转换:

wsl --set-version Ubuntu-20.04 2
# 正在进行转换,这可能需要几分钟时间...
# 有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
# 转换完成。

安装 Docker:

Install Docker Engine on Ubuntu | Docker Documentation

https://docs.docker.com/engine/install/ubuntu/

WSL 上的 Docker 容器入门 | Microsoft Docs

https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers

# 升级、安装前置依赖:
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# GPG 更新
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 官方源
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
#   sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 向 sources.list 中添加 Docker 软件源
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 官方源
# 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

# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo service docker start

# 查看 docker 运行状态
service docker status
# * Docker is running

安装 Z-BlogPHP:

【折腾】Docker 化安装 Z-BlogPHP_电脑网络_沉冰浮水

↑ 上文是基于 CentOS 环境写的,Ubuntu 下使用需要在命令前加 sudo;「这东西果然好麻烦」

win10 内直接127.0.0.1:[端口号]即可访问 WSL 内的服务;

Win10 与 WSL2 间的网络和文件互访 - LOGI

https://logi.im/script/achieving-access-to-files-and-resources-on-the-network-between-win10-and-wsl2.html

安装 Git:

sudo apt install git
git --version
# git version 2.17.1

默认安装的版本较低,需要最新版可以参考下方:

如何在 Ubuntu 上安装最新版本的 Git - 知乎

https://zhuanlan.zhihu.com/p/108991735

其他:

WSL2 网络代理配置(apt 与 git) - 知乎

https://zhuanlan.zhihu.com/p/108927713

cmd 中执行 ipconfig 查看网络信息,然后在 wsl2 中执行export https_proxy="socks5://$IP:$PORT"

实际用 192.168.*.* 好像成功了;

ipconfig

# 无线局域网适配器 WLAN:

# 192.168.123.236

# export https_proxy="socks5://192.168.123.236:10808"

# 以太网适配器 vEthernet (WSL):

# 172.26.160.1

# export https_proxy="socks5://172.26.160.1:10808"


在 WSL 2 上设置 Node.js | Microsoft Docs

https://docs.microsoft.com/zh-cn/windows/dev-environment/javascript/nodejs-on-wsl

ubuntu18.04 安装 nodejs 最新版、指定版 12.x 14.x - 尽情山水 - 博客园

https://www.cnblogs.com/forheart/p/13203249.html


【折腾】VSCode 远程开发配置(Remote Development)_电脑网络_沉冰浮水

https://www.wdssmq.com/post/20201120519.html


爱发电

本文标题:《「折腾」VSCode + wsl2 + Docker 探究》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20220211184.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

搜索

本周旧文

2024 年了,姑且备份下嘟特存档。。

……,一个不知名的小众样式库 + 内联样式混写这种入坑姿势确实很有槽点,但是,「已经开始学」并且能够持续是绝对值得肯定的。。

在贴吧看过很多提问了,就有种错觉:好多人为了提一个问题专门注册了贴吧,问题本身可能得到有效回答,也可能没有(和提问的点及具体姿势有关。。但无论如何,之后就和注销了账号一样没有然后了,好像之后永远不用学相应的东西一样。。

《恶魔娃娃》

- 他们正研究你究竟是真正的大人,还是伪装成大人的小孩

- 我自己都研究很久了

乐高 DC 里,(基本就蝙蝠侠家,,年龄最小的那个无论是谁感觉人设都会变得一样 - -

所以,就感觉和祥林嫂一样,每天都需要向外「签到」自己的情绪感受,然而又并没有什么「需要」我这样的签到……

只要梦里出现学校的概念,形式和反抗好像也都不重要了,,天还没亮,骑自行车去上学,没走多远「想起来」并不需要上学的,下来搬起车原地调头然后推回家。。

《K 星异客》里,「青鸟」真的是等来的,或者说是突然出现然后引发改变的外部因素。。。

梦的最后也是又一次意识到教室里的同学只是幻境中的投影,被困住的只有我;虽然也终于总结出,在梦里从来没有和同学的投影有过冲突和争执,甚至还附和我反驳「管理者」身份被进一步放大并不特指某一个人的老师。。

就和大脑会突然播放某一首歌一样,「讨厌自己」这句话也是自己突然就会播放一次,然后频率更高。。

学校,学校,学校,总是梦到学校,,就好像灵魂被诅咒禁固一样。。

爱发电支持者

最新留言

友情链接

  • 订阅本站的 RSS 2.0 新闻聚合
召唤伊斯特瓦尔