更新于20200711

这段时间微软推出的WSL2似乎很香,后面找个时间试下。目前已经支持GPU和docker,不过目前性能有待提高,还有一些小bug还在完善,喜欢折腾的小伙伴们可以关注下:https://www.zhihu.com/question/402055637


(原回答)

强调:WSL中使用docker要求系统为win10专业版或企业版

目录(更新于2019/09/22)

  1. 开启WLS所需功能
  2. 搜索安装Ubuntu18.04 LTS
  3. 更新软件源等(优化参考)
  4. Vim配色美化(新增)
  5. 配置并启用SSH
  6. 配置python和jupyter远程交互
  7. 解决WSL中的中文显示乱码问题
  8. WSL中Docker的安装与使用(使用Docker for Window10的方式
  9. WSL中Docker的安装与使用(使用apt install的方式

9.22更新内容(1):增加了第二种在WSL中安装与配置docker的方式(Docker for Window10,更推荐)

9.22更新内容(2):补充WSL中Docker的版本号:Docker version 17.03.2-ce, build f5ec1e2

9.22更新内容(3):解决WSL中的中文显示乱码问题

4.13更新内容:修改关于docker版本问题

4.14更新内容:增加常见问题以及解决方案

4.20更新内容:增加cannot connect to the Docker daemon解决方案


序言

看到一篇不错的Windows Subsystem for Linux参考文章,实践尝试了一下,最后遇到一些问题,并把过程完善了一下,增加了VIM的简单美化过程,还有贴出Xshell的使用方法和docker的安装方法(仅支持window10专业版),顺便把完整过程贴出来,万一以后用到呢,对吧。主要参考第一篇,侵删。

先说一下,我主要工作机器就是小米笔记本pro,日常工作都是使用公司实验室的GPU服务器,所以对于WSL,我的需求是在win10下能够轻量使用ubuntu即可。这个子系统下的ubuntu不支持CUDA GPU加速,所以打算用它跑GPU等等的小伙伴可能要失望了。

前段时间微软有个投票征求广大用户的意见,关于是否期待WSL支持GPU运行,到时候补充

不过可以选择Docker for window10、双系统或者是虚拟机,我的笔记本内存才8g,带不动虚拟机,日常工作使用实验室服务器。

参考1:不用装双系统,直接在 Windows 上体验 Linux:Windows Subsystem for Linux(基本参考这个)
参考2:开启win10下Ubuntu子系统的SSH服务(对比了一下)
参考3:Win10 bash on Ubuntu 下 vim 使用molokai配色(实测好用)
参考4:Xshell5及Xshell6 破解版软件(亲测可用)

正文部分

  • 开启window功能

控制面板>程序和功能>启用或关闭window功能>勾选“适用于Linux的Windows子系统”

  • 搜索并安装ubuntu18.04 LTS

在window自带的Cortana搜索Microsoft store,搜索ubuntu,选择18.04LTS,右上角点击“获取”,会下载大概210M左右的包,下载完会要求你重启。

  • Window菜单中启动Ubuntu18.04 LTS

就像打开应用一样,点击打开即可,之后进入初始化(大约5分钟)。若等待太久的话,按下空格,有时候会卡住不更新进程(估计还是有点小bug)。之后设置用户名(不能首字母大写)、口令(密码),这里是完全独立于Window的账号。

查看一下基本的信息

查看linux内核版本

  • 更新软件源(阿里云源)并更新软件

Licko补充: 基本与参考1的链接内容 一致,不过发现改用阿里云的源之后,发现会有一些问题,比如我卸载了VIM想重新装VIM,会出现apt报错,查了很久才知道:由第三方源下载更新的软件和官网源的软件依赖混合使用有时候会出现依赖错误 (阿里云源毕竟不是官方源),这时候就体现了备份原文件的重要性了,可以把阿里云源的删除,把备份的那份修改回原来的名字,接着"sudo apt update","sudo apt upgrade"即可。

#使用 root 权限登录,后续输入密码
sudo -i#接下来备份当前源,输入以下命令
cp /etc/apt/sources.list /etc/apt/sources.list.old #这个sources.list文件就是源文件,删除该文件,重新写一个
rm /etc/apt/sources.list
vim /etc/apt/sources.list

复制下面内容,然后单击右键粘贴进去即可,之后按ESC,输入wq保存并退出。

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricteddeb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial universedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates universedeb http://mirrors.aliyun.com/ubuntu/ xenial multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-propertiesdeb http://archive.canonical.com/ubuntu xenial partnerdeb-src http://archive.canonical.com/ubuntu xenial partnerdeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-security universedeb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

开始更新软件镜像源和软件包

sudo apt update      #更新软件源
sudo apt upgrade     #更新软件包

上面过程中有时候会卡住不动,可以尝试按下空格,判断是否卡住

  • 简单对vim进行美化

为什么要对vim美化?下面启动SSH看那个vim,我都看快瞎了。而且vim是一个功能强大的文字编辑器,后面很多时候会用到,但是默认的颜色配置特别瞎眼,所以简单找了一个配置教程。

参考这个博客:

Win10 bash on Ubuntu 下 vim 使用molokai配色​blog.csdn.net

简单搞定,具体如下:

mkdir .vim
cd .vim
git clone https://github.com/tomasr/molokai.git
cp -rf molokai/colors/ ./colors
vim vimrc
colorscheme molokai

  • 启用 SSH 并使用Xshell6客户端登录

平时工作原因需要用到远程连接服务器,就需要用到SSH客户端,有putty、Multiputty(只是能够开多点窗口的putty罢了)、Xshell,最近我换成Xshell6了,除了它好看点,重点在于它可以设置半透明!!!因为日常工作过程无法避免频繁从纯白色的浏览器和背景色黑不溜秋的界面来回切换,长时间这样会折磨眼睛。它让我想起Ubuntu令人眼前一亮的下拉式终端Guake Terminal,说多了,回正题。

  • 启用SSH所需设置
#设置root的口令(密码),用作后续登陆使用
sudo passwd root#安装openssh-server(似乎ubuntu自带已安装)
sudo apt install openssh-server#备份很重要
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak#使用vim进行编辑,按i进入insert模式
sudo vim /etc/ssh/sshd_configservice ssh start             #启动SSH服务
service ssh status            #检查状态在vim中分别找到并对应修改四处,修改后ESC,输入wq保存退出,具体如下:
Port = 8022
ListenAddress 0.0.0.0        # 如果需要指定监听的IP则去除最左侧的井号,并配置对应IP,默认即监听PC所有IP
PermitRootLogin yes           # 如果你需要用 root 直接登录系统则此处改为 yes
PasswordAuthentication yes    # 将 no 改为 yes 表示使用帐号密码方式登录

之后启动SSH并检查状态,输出running即正确。

sudo 

  • 使用Window10的cmd登录
  1. win键>windows设置>应用和功能中的“管理可选功能”
  2. 查看列表是否有“OpenSSH客户端”,若无则添加,若有则进入下一步.
  3. “win键+r”输入cmd进入cmd比如上面的案例,输入“ssh root@xxx.x.x.x -p xxxx”即可
  • 使用Xshell6客户端登录(有个工具方便后续WSL中使用docker)

Xshell6是需要钱的,不过谢谢万能的网友,知乎不给放链接,自行百度即可。

下载之后一路安装即可,有个什么用户和机构填写的,随便写就行。后面启动Xshell6,接着找到右上角点那个+号>新建会话>进入“连接”界面填信息>点击“用户身份验证”输入root和密码即可,具体如下(图是参考1里面的)

名称:WSL(这个随便填)
协议:SSH
主机:127.0.0.1(本机环回接口)
端口号:8022(按刚刚设置过的输)

Xshell6有两个挺好的快捷键,Alt+r是半透明,Alt+Enter是全屏,效果如下:

  • 使用Jupyter进行远程交互(py2和py3)

介绍一种最快速最直接的方式,但是ubuntu没有自带pip,需要先安装python-pip工具才能对python模块进行管理与安装。

sudo apt install python-pip #安装的python2的pip
sudo apt install python3-pip #安装的python3的pip
sudo pip3 install jupyter #用python2安装jupyter
pip3 install ipykernel #使得jupyter内核可以同时拥有python2和python3
jupyter notebook --allow-root

接着,复制生成的“http”那段在浏览器打开即可。

大功告成,而且可以在jupyter的配置文件中设置启动工作目录,比如我的是"cd /mnt/d",每次打开jupyter就会进入我的D盘目录,类似于docker的共享目录。

解决WSL的中文乱码问题

实测可用,参考:https://blog.csdn.net/weixin_41921520/article/details/97940040

先安装以下软件包:

sudo apt-get install language-pack-zh-hans

打开以下文件

sudo vim /etc/environment

在最后写入以下内容,保存

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"

在/var/lib/locales/supported.d/,新建local文件

sudo vim /var/lib/locales/supported.d/local

写入以下,并保存:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN GB2312

执行以下命令:

sudo locale-gen

接着,关闭WSL界面再开启即可,不用关机,实测可用。

其他:解决中文空格乱码问题

sudo apt-get install fonts-droid-fallback ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming

Docker 配置与安装(方法一,docker for windows,推荐)

首先说明一个大坑, 仅支持window10专业版系统,或是已安装docker for window10,否则无法启动daemon守护进程,就算一步一步到最后没有任何报错,也无法启动docker。我一直侥幸以为能够找到万能网友的解决方法,或者是自己能够尝试得到解决方案,后来发现除了上面条件满足才能实现。

补一下之前后续尝试过的方式,这种方式更加简单便捷,也更稳!

  1. 去官网下载Docker for window桌面版

2. 安装docker for windows时,可选勾选第二个(当时没截图);之后安装完,需要注册并登陆docker账号;

3. 接着用window的powershell测试docker for windows(第三步和第四步忘记顺序了,抱歉)

4. 将container设置为“Linux container”

介绍一下window container 和Linux container,具体参考这篇介绍

windows container 是相当于 docker 在 linux 下的原生实现,linux container 是通过 Hyper-V 托管了一个小型虚拟机以实现 linux 环境。
如果你的磁盘不够大网速不够好, 不建议直接在自己电脑上尝试 windows container,windows container 大部分是基于 windows-sever 的镜像,动则十几个G,下载镜像都不一定能下载成功。

成功之后再去将container设置为“switch to Linux container”,右键点击桌面右下角docker的鲸鱼小图标,确认第6行是否已经显示为"switch to Windows containers",这说明已经在使用Linux container。否则,会显示为“switch to Linux containers”。

5. 打开setting的General,勾选最后一项,非常重要!!!否则将不能在WSL中使用docker

6. 在WSL中测试docker

使用我们前面配置好的Xshell打开WSL,测试docker

7. 设置阿里云镜像加速器

加载国内的阿里云加速器,没有的话需要自己进阿里云去注册),有助于更快速的拉取镜像等等。注意:"registry-mirrors"输入自己的加速器地址

8. 其他设置

在Shared Drives,你可以设置磁盘共享,比如D盘,你使用-v的方式挂载你的D盘,启动一个镜像后,在容器中就可以访问你D盘的文件,以及docker cp实现文件交互。

其他的Advanced、Network等我都是使用默认设置,想要了解更多可以去docker官网查看docker for window桌面版的介绍和教程

  • Docker的配置与安装(方法二,不推荐,这种是常规Linux里面的安装方式)

主要参考Docker官网关于linux中安装docker的安装教程和这个

首先说明一个大坑, 仅支持window10专业版系统,或是已安装docker for window10,否则无法启动daemon守护进程,就算一步一步到最后没有任何报错,也无法启动docker。我一直侥幸以为能够找到万能网友的解决方法,或者是自己能够尝试得到解决方案,后来发现除了上面条件满足才能实现。

安装步骤

  1. 将软件源修改为阿里云的源(上文有修改过,不再赘述)

简单说明一下,尽量一开始就先将ubuntu的软件源修改为阿里云的源,避免安装的各种软件来自不同源,不然你一个sudo apt-get upgrade和update就把软件都弄混乱了,会出现版本报错还是其他奇怪的错误。

2. 先卸载旧版本的docker

sudo apt-get remove docker docker-engine docker.io

3. 安装必要的一些系统工具

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

4. 安装GPG证书

#别忘了最后的“-”
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

5. 写入软件源信息

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

6. 列出可用版本

sudo apt-cache madison docker-ce

7. 更新并安装 Docker-CE

sudo apt-get update
sudo apt-get install docker-ce=17.03.2~ce-0~ubuntu-xenial

注意:我这里的图是最新版18.06.3版本,最近在服务器也是装这个版本没有问题。如果出现问题,可以尝试换成对应旧一点的版本。

2019/09/22 补充WSL中docker的版本号:Docker version 17.03.2-ce, build f5ec1e2

8. 开启docker服务,查看docker状态

sudo service docker start
sudo service docker status

或者是以下方法也可以

systemctl status docker

9. 拉取第一个镜像,测试docker

docker run hello-world

若成功出现上图,说明大功告成!

使用docker的命令,查看现有镜像和正在运行的容器

docker images
docker ps

10. 加载阿里云加速器

加载阿里云服务器(进阿里云去注册),注意:"registry-mirrors"输入自己的加速器地址

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

后面的WSL图形化我就没去尝试了,因为这个ubuntu是不支持CUDA GPU加速的,而自己小米pro有双系统,所以没打算用这个玩太多,还不如选择Docker for Window10来玩,所以有空再玩啦!

Docker常见问题

1、docker ps报错连接失败

通常先看看docker的守护进程开启没有,再看看是否当前用户在docker组

参考

# 先查看docker的状态,若不是running则start即可
sudo systemctl status docker
​
# 若不是running则start即可
sudo systemctl start docker    #未启动则启动
sudo systemctl enable docker   #激活开机自启动

通常是因为没有激活开机自启动docker,

若docker的状态是running,那就要检查当前用户是否在docker组。若不再,直接将当前用户加入docker组即可

# 使用命令“groups”,查看当前用户所在组
groups
​
# 其中${USER}写用户名,将该用户加入docker组
sudo gpasswd -a ${USER} docker
sudo gpasswd -a LChuang docker

2、docker 创建镜像失败(这个问题无视,因为WSL目前并不支持CUDA)

原因:cuda版本和英伟达驱动不兼容

参考这个:https://juejin.im/post/5c91a766e51d453f3e50b68c

3、启动镜像和容器失败

检查是否设置了--name,然后已经存在相同的名字

其他常见问题以及解决方案

一、用管理员权限还是出现cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running

先确定是否为window10专业版,其次打开window10的Docker> Settings > General: “Expose daemon on tcp://localhost:2375 without TLS”.

参考这篇

docker登录密码错误_【WSL+Docker】新手Win10下的WSL Ubuntu18并使用Docker(两种方式)...相关推荐

  1. docker登录密码错误_Docker安装运行Mysql 5.7.31容器并修改数据库密码

    一.安装Docker 参见文章:https://blog.csdn.net/y1534414425/article/details/107872715 二.拉取Mysql 5.7.31镜像 1dock ...

  2. 简述java中异常_柴涛666 的日志-简述java中处理异常的两种方式。

    抓try 抛throwspackage 异常; import java.util.Scanner; public class a { public static void main(String[] ...

  3. php后台管理员登录密码错误,如果后台管理员的密码错误,我该怎么办,还有两种找回密码的方法...

    Dedecms是中国著名的网站管理核心. 由于编织梦想简单易用,因此可以进行二次开发,并且可以实现各种网站. 在使用dedecms的过程中,如果忘记了梦想管理后台的密码怎么办?神山个人博客分享了两种修 ...

  4. Widows下TortoiseGit登录密码错误

    整理之前的一个笔记,记录. TortoiseGit 2.3.0.0 TortoiseGit登录密码错误,如下图,输入git的密码无法成功登录. 原因是: TortoiseGit的登录密码和git是不一 ...

  5. 2020无人用的邮箱和密码大全_Amazon后台登录密码错误!如何辨别账号是否被冻结?...

    啊你绝对不知道 这里每天都会更新一些跨境电商实时动态. 卖家经验交流,跨境平台动态研究, 曝光销售技巧,转化技巧,站外引流的方法 亚马逊后台登录密码错误,如何辨别账号是否被冻结?很多人一看到自己账号登 ...

  6. 制作Docker镜像的两种方式

    此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...

  7. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  8. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  9. Docker生成镜像的两种方式

    有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像 两种方式: 更新镜像:使用docker commit 命令 构建镜像:使用docker build 命 ...

最新文章

  1. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)
  2. linux基础(6)-shell编程
  3. radio button html5,Tkinter Radiobutton单选框的用法
  4. Description Resource Path LocationType Java compiler level does not match the version of the instal
  5. chrome浏览器版本简单介绍
  6. 参数问题:nested exception is java.lang.NumberFormatException: For input string: “null“,已解决。
  7. 怎么去图片水印?教你三个方法解决图片怎么去水印
  8. 学生HTML个人网页作业作品~蛋糕甜品店铺共11个页面(HTML+CSS+JavaScript)
  9. 演示文稿 Beamer 入门
  10. Beacon API的应用
  11. 基于微信小程序的童装(服装)商城的设计与实现
  12. 【征稿】第三届电子、信息与计算技术前沿国际会议(ICFEICT 2023)
  13. TCP为什么需要3次握手与4次挥手
  14. gamepad android手柄,经验篇,游戏手柄使用教程,刀锋游戏手柄连接安卓苹果手机设置方法...
  15. 基于矢量切片的电子地图配图(三)配图准备
  16. html鼠标背景特效,6种鼠标滑过按钮背景动画特效
  17. HTTP状态码大全(整理)
  18. petri网基本知识
  19. 译文 FaceNet: A Unified Embedding for Face Recognition and Clustering
  20. 农村家庭致富小机器有哪些

热门文章

  1. java打不开_java eclipse打不开的解决方法
  2. 如果你不想继续穷下去,就看看吧,想想吧
  3. 新人遇到问题了怎么办
  4. 低密度SLC NAND闪存市场现状研究分析与发展前景预测报告
  5. 前端跨域之PostMessage详解
  6. 旧版疯狂的松鼠nuts android版,疯狂的松鼠 -疯狂的松鼠 攻略-疯狂的松鼠 安卓_苹果_iOS下载_礼包_开服_新闻-07073手机游戏...
  7. ps -aux命令详解
  8. 阻抗匹配,这么理解就懂了
  9. java输出乱序日语假名
  10. Modelsim SE仿真之器件库的编译与使用