「折腾」VSCode + wsl2 + Docker 探究

吐槽/反馈/建议:我的咸鱼心  爱发电-@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
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

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

相关文章

发表评论:

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

网站分类

  • 订阅本站的 RSS 2.0 新闻聚合

搜索

本周旧文

nuc 四个口插硬盘都识别不到,有亮灯。。最后试出别插到底。。

绿联的硬盘盒。。另外一个联想的没问题。。

近期观影记录:超级马里奥,死侍与金刚狼。。

搬家也告一段落,虽然搬过来的东西还得归置,新衣柜虽说已经散俩月味儿了,但还是不想放衣服进去。

要不我每年汇总整理一次??碎雨集_沉冰浮水_第1页

所以,不带这条的话,2024 年目前只发了 13 条嘟????

VSCode 内 git 操作卡住的时候没办法主动取消一直是个痛点,一般都是推送或拉取,今天连提交都卡了。。

又一个夏天过去了,所以今年也没买防水鞋套;然后天凉了,为了应对踢被子买了睡袋,不知道 1.2 米会不会略窄。。

《五至七时的克莱奥》,2018 年 6 月加入列表,21 年 11 月底发现 B 站上线了这部,直到前几天才看完,还是分两次看的。。接下来有五项是 2019 年的,都是电影 —— 略长的待办列表。。

有用程序自动抓取自己带 tag 的嘟,然后按年备份后从线上删除;刚发现去年的数据有备份但是没删线上??和本地数据对比后发现线上的还少一条,Why??

本质上,每个人需要的是「让自己面临的问题得到解决」的能力。。

这又涉及到直接能力和间接能力,,缺乏直接能力很正常,视情况可以通过学习来掌握直接能力,或者「请」有直接能力的人来帮自己解决。。

缺乏间接能力的情况是真没救,尤其是对「这是**我自己**面临的问题」这一前提没有明确认知的人。。

爱发电支持者

最新留言

友情链接