WSL:微软Linux子系统
目录
WSL在经过一段时间的发展后,已经具备了一定的可用性。相对VMWare来说,有性能和易用性上的优点。
谨慎使用,WSL2仍然不够稳定。
基础搭建
- 基本步骤:
- 在“启用或关闭Windows功能”中,打开虚拟机平台、Linux子系统两个选项即可。
- 重启
- 不想安装在C盘,可以参考旧版 WSL 的手动安装步骤,更新内核,下载所需镜像,移动到喜欢的路径下,更改后缀名(从AppxBundle到zip),解压缩并运行其中的ubuntu.exe,此后Linux将存储在exe同级位置
- 安装过程中可能遇到问题,参考
- 注意事项
- 安装后,WSL2会在Windows内创建一个ext4.vhdx文件,作为提供给Linux使用的虚拟磁盘,磁盘内存放所有Linux文件(根目录)
- ext4.vhdx可能会被Windows磁盘管理识别并挂载,此时将无法启动子系统,需要去磁盘管理中分离该VHD
开发环境
基本开发
- 更好用的命令行:推荐安装微软的全新终端
- docker:查看参考中的相关链接。可能会遇到的问题
图形界面创建可能有问题,建议还是在命令行里用docker run
ubuntu22.04官方镜像无法进行apt-get update
。宿主机一侧的网桥并没有工作。尚未有结论,但是看起来wsl中的docker工作方式略有不同,其网桥无法通过
brctl
、ip addr
观测到,可以用docker network ls
看一下,参考坑- 在尝试安装elasticsearch的过程中,使用图形化界面绑定端口,发现该端口是容器映射到wsl2,需要在做一步从wsl2映射到windows,参考,powershell执行如下指令
# 先查看wsl的地址 wsl -- ifconfig # listenXXX是windows侧,connectXXX是wsl侧 netsh interface portproxy add v4tov4 listenport=7777 listenaddress=0.0.0.0 connectport=7777 connectaddress=172.22.153.228 # 查看映射配置 netsh interface portproxy show all
ElasticSearch
参考命令来源,主要需要考虑将ElasticSearch和Kibana连接起来
# wsl2内
docker network create es-stack-network
# 根据你所使用的版本
docker run -d --name elasticsearchdb --net es-stack-network -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.11.3
docker run -d --name kibana-es-ui --net es-stack-network -e "ELASTICSEARCH_URL=http://elasticsearchdb:9200" -p 5601:5601 kibana:8.11.3
# ====== windows ======
netsh interface portproxy add v4tov4 listenport=5601 listenaddress=0.0.0.0 connectport=5601 connectaddress=172.22.153.228
注意
- 初次启动需要进行一次token的验证,先去es下的bin中生成,再去kibana下查看验证码。
- 初次启动kibana需要密码,也可以从es下的bin重置
- 非初次启动记得先启动ES,确定ES日志中显示OK,再启动Kibana。否则Kibana会永远显示ES Server未就绪。
Hadoop
docker desktop内提供的镜像都不太好。推荐参考big-data-europe。直接使用一个完整的hadoop环境的docker compose构建。docker desktop目前已经继承了docker compose,所以可以直接使用docker-compose.yml。下面是对该教程的指令总结
git clone
# 核心就是一句话
docker-compose up -d
# 可以看到hadoop已经启动
curl http://localhost:9870/
# 另外该例子还提供了一个简单的MapReduce程序供测试
# 在wsl2主机侧下载并拷贝给namenode
wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-mapreduce-examples/2.7.1/hadoop-mapreduce-examples-2.7.1-sources.jar
docker cp ./hadoop-mapreduce-examples-2.7.1-sources.jar namenode:/tmp
# 先进入到namenode节点,后文均位于namenode下
docker exec -it namenode bash
cd /tmp
mkdir input
# 准备两个文件
echo "Hello World" >input/f1.txt
echo "Hello Docker" >input/f2.txt
# 创建hdfs文件夹,名为input
hadoop fs -mkdir -p input
# 将当前的input文件夹拷贝过去
hdfs dfs -put ./input/* input
# 执行hadoop,mapreduce任务
hadoop jar hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount input output
# 查看结果
hdfs dfs -cat output/part-r-00000
交叉编译
显卡
坑
- Windows下,WSL2内的Ubuntu容器无法访问外网,仍未解决
- Docker Desktop在Windows上确实不支持Host模式,具体的使用参考微软文章
- 关于网络部分的其他限制,参考官网
- 关于WSL2的网络拓扑,参考WSL2设置桥接网络及高级设置 _