win10 WSL1 结合 Docker 使用

win10 WSL 出了已经有段时间了,但是一直处于观望状态没有去试用。近期由于确实受不了虚拟机的资源消耗,决定尝试下。先大概说下使用感受,说实话还是有点喜出望外的。体验上确实轻便,打开wsl 命令工具就可以打开Linux 终端,速度也很快,基本体会不到什么阻碍,而且在wsl 环境里面也大都可以正常使用Linux的命令。但是也有一些不足的地方,比如不能完全兼容systemctl, systemd等等,IO速度相对原生Linux也是大打折扣,在编译和解压方面可以很深体会到。毕竟不是真正的Linux,而是挂在Windows NT内核之上的仿Linux 系统。根据这2点不足,微软在今年打算推出新的WSL2, 据官方称是基于Hyper-V 的虚拟机技术,可以跑原生的Linux 系统,以及原生支持Docker。看来微软还是拥抱虚拟机技术了,不知道具体资源消耗以及性能方面会怎么样,希望有惊喜(但是看网上的一些试用反馈还是有些不足,比如CPU没能全部发挥,内存释放还有些问题),总之Windows 衔接Linux 还是任重道远。不过目前情况WSL的使用基本可以满足日常的常规开发,如果要测试整体性能,比如网络高并发等,或者需要conda 访问GPU,还是建议去纯Linux系统下吧。
这里贴张图,感受下现下WSL1 的大致实现方式,或者参考这里:

win10 WSL1 结合 Docker 使用_第1张图片

WSL 的安装

WSL的安装很简单,网上教程也很多。
大致就是2个步骤:

  1. 打开WSL 支持
以管理员权限打开powershell,然后运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

或者直接设置:
设置-> 应用 -> 在应用中[找到应用和功能选项卡],下拉到最后找到程序和功能并打开 
-> 程序和功能的左侧点击开启或者关闭Windows功能,在里面下拉找到"使用与Linux的Windows子系统" 并且勾选

上述方法都需要重启才能生效
  1. 安装WSL Linux发行版本
    可以直接在微软商店中搜索Linux 来安装,目前商店里发行的有Ubuntu,Kali, Debian,SUSE。
    如果想要安装其余的发行版本,可以参考这个GitHub 仓库

WSL的使用

安装完成之后使用就简单了:

  1. 如果在微软商店里面安装,可以直接在开始菜单里面找到对应的应用程序,打开就是命令行环境。
  2. 如果是上述GitHub 仓库里面安装的,在安装目录底下双击安装程序可以直接打开wsl 命令环境。
  3. 另外也可以直接在powershell 中, 输入wsl -d ubuntu 打开wsl 环境。
  4. 最后在1903 以上的win10 版本可以用Windows terminal 来使用,而且支持自定义界面,非常方便。如下图:
    win10 WSL1 结合 Docker 使用_第2张图片
    想要了解Windows terminal 的配置可以访问其官方文档。
    另外Linux下路径过长导致tab显示冗长的解决方法参考这篇文章的改进。

Docker 的结合

由于WSL 还不是原生的Linux,所以需要借助[Docker for Windows]来实现Docker,但是这个工具只支持win10 专业版。其余Windows 系统也可以用Docker,有另外工具叫[Docker Toolbox]。在win10 专业版也可以看个人喜好和习惯选择其一,关于这2个工具的大概讨论可以 看这里。
这2者实现方式不一样,win10 的Docker for Windows 是基于Hyper-V 技术,和后续的WSL2 一样,而且该工具开发公司也和微软紧密合作以提高Docker工具的性能;而Docker Toolbox 需要和虚拟机 Oracle VM VirtualBox 等工具结合。
注意:使用Docker For Windows 和VM虚拟机不兼容,因为Hyper-V与VMware Workstation冲突,二者只能选其一,虽然网上有尝试的解决方案,但是还是建议根据需求自行选择。

接下来就是docker的安装与配置,可以参考这个流程,很详细了。这里总结下步骤和遇到的一些问题的解决方法:

  • Windows Doecker 的安装
    Windows Docker下载==> 地址
    Windows Docker官方安装流程参考, 其实就是双击安装程序,然后一步步执行就好了。由于镜像默认是从官网拉取的,所以可以看实际情况设置镜像加速,参考这里,简单图示:
    win10 WSL1 结合 Docker 使用_第3张图片
  • WSL的Docker 安装
    安装完Windows的docker 客户端后,需要在Linux环境下安装Docker client,实际不同系统可以参考这里。
    假如是安装的centos,运行 “systemctl start docker” 会出错,可以考虑换掉 systemctl 的脚本,参考这个GitHub。
    最后启动链接远程Docker 服务,会提示错误:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

注意先在Windows docker 上开启监听端口,然后在WSL里面添加如下配置来解决:

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc

win10 WSL1 结合 Docker 使用_第4张图片

  • Docker 共享目录设置的注意点
    Docker 需要共享目录的形式是这样的:
/c/Users/nick/dev

但是WSL默认的mount 形式是这样的:

/mnt/c/Users/nick/dev

所以需要改下WSL 的mount 方式来适应Windows Docker的需求,方法:

  1. Windows 10 18.03或者以上的版本 =>
sudo nano /etc/wsl.conf

# Now make it look like this and save the file when you're done:
[automount]
root = /
options = "metadata"

修改完成后最好重启,或者注销再进来。
2. Windows 10 1803 之前的版本 =>

sudo mkdir /c
echo "sudo mount --bind /mnt/c /c" >> ~/.bashrc && source ~/.bashrc

Docker 的使用

这里有Docker的命令大全可以参考。
注意的点就是Windows Docker 共享目录的开启:

docker run -it -v //e/Code:/root/windev centos:6.6 /bin/bash

//e/Code 是Windows上面的路径
/root/windev 是Linux上的挂载路径
centos:6.6 是docker 镜像名称

你可能感兴趣的:(Linux,docker)