[完美解决]如何在windows安装docker toolbox,使用tensorflow,Jupyter Notebook,各种问题的解决方案
上两周心血来潮想在自己的Surface(Win10 Home系统)上用TensorFlow和Python,但是安装实在是太麻烦了…就想到能不能在Windows上用docker直接运行linux环境的TensorFlow?网上一查还真有,然后很开心的下载安装…谁知进入了一个超级大坑T_T,经过断断续续几次的研究(折腾)终于在今天搭建完成环境,在本文中给一个详细的教程,帮助大家少走弯路~!
这是一个2018年的新年礼物!
1、下载Docker Toolbox for Windows,安装VirtualBox
https://docs.docker.com/toolbox/overview/
推荐用迅雷下载,或者其他下载软件下载,用IE下载会让人抓狂的…一开始我下载了Docker for Windows,安装的时候才发现我的系统是Windows10 home版本不能装!需要Win10 Pro版才能装,那么大概以下的Win7/8这些都是不能装的,所以大家一般都跟我装的一样就行了,下载Docker Toolbox for Windows。
安装比较简单,基本按照这样点:
装完后就有:
这里就有一个大坑天坑啊,从docker官网上下载下来自带安装的VirtualBox是5.2版本,我用了以后所有装好的虚拟机点“设置”或者网络之类的选项,就直接VirtualBox无响应了,虽然虚拟机是起来的(可以在命令行界面操作,但是不能配置网络就没办法后面配置转发,那么在主机Win10环境下就不能访问linux虚拟机里面跑的docker container起的Jupyter…这样编程就很不方便了..)作为有一点点强迫症的我是很不能接受的。所以呢,我就又单独删掉了上面安装的VirtualBox,下载了最新版本的VirtualBox 5.2.4,地址:
http://download.virtualbox.org/virtualbox/5.2.4/VirtualBox-5.2.4-119785-Win.exe
然后呢,就可以往下走啦…还有好几个坑
2、安装、启动虚拟机
因为我们安装的是Docker Toolbox,所以本质上Docker并不是安装在Windows上的,而是安装在虚拟机上的,所以需要先装一个虚拟机。而这个虚拟机安装很方便,不需要单独去准备Linux的镜像,因为Docker版本有对应的boot2docker镜像。
点击Docker Quickstart Terminal图标后,一般会出现下图(图片借用[1],这一段我忘记截图了),提示要么就是Boot2docker iso找不到,或者是out-of-date;它去找的路径一般是C:\Users\XXXXXX.docker\machine\cache,其中XXXXXX是你的电脑用户名,
它自己也会下载,但是极慢,所以关掉Docker Quickstart Terminal,根据前面屏幕提示自行用下载软件去https://github.com/boot2docker/boot2docker/releases/download/v17.12.0-ce/boot2docker.iso
下载最新版本(可以根据上面屏幕的提示下载,我这个地址可能过几天也会旧的),并放到路径下:
重新启动Docker Quickstart Terminal,下面这样就正常了:
然后你就可以看见起了一个叫default的虚拟机,IP地址是192.168.99.100(我这里是,可能你的不一定完全一样,没关系。可以在win下面ping通的)
OK,到这里docker就安装好了,大家可以用docker啦,后面就开始使用TensorFlow了。docker下用TensorFlow是一样的,所以有经验的同学应该很快就搞定。
简单科普一下Docker的使用命令,这里就先不展开啦http://www.docker.org.cn/dockerppt/106.html
3、安装TensorFlow
根据你需要下载的镜像,先在docker hub上搜索一下,比如我要搜索TensorFlow,只要输入docker search tensorflow
然后pull第一个官方的镜像到本地
docker pull tensorflow/tensorflow
这里直接这样做没问题,但是速度极慢,主要是镜像都在国外,所以推荐使用docker加速器,下面这个是免费的,速度很快,很赞!https://www.daocloud.io/mirror#accelerator-doc
点进去,注册id以后就可以看到镜像加速地址了,记下地址,然后在终端中依次打入下面四条命令(替换其中的加速地址),想要拷贝命令见文末的小贴士。
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
这样前面的pull就飞快啦!如果你只是想用TensorFlow,或者只是测试一下前面的是不是都装好了,那么只要
docker run -it tensorflow/tensorflow bash
然后运行python,再看看TensorFlow简单的命令是不是OK[4]
到这里其实Python和TensorFlow已经可以用了,如果你对Linux比较熟,就可以自己安装vi这些然后开始用咯。不过这样毕竟比较复杂,所以呢我就想用Jupyter Notebook来学习TensorFlow和Python,这个环境对在windows上使用还是比较友好的。
3、安装Jupyter Notebook
这一块是较为让我头疼的,在上面花了几天时间研究(主要是之前用virtualbox版本不好,一点设置就卡死…)。
如果你是直接在Linux主机上安装docker的,就像一般的用法,
docker run -it -p 8888:8888 --name xx tensorflow/tensorflow bash
TensorFlow的镜像中在/目录下就有一个启动Jupyter服务的脚本,启动这个脚本
根据提示,只要在主机的浏览器中输入http://localhost:8888
或者用可以联网的其他机器访问http://主机IP:8888,就可以访问Jupyter了,但是呢我们是在Win10上运行了虚拟机,再在虚拟机上运行了dokcer,这样就找不到Jupyter服务了。
我们需要做的是首先stop虚拟机default:
docker-machine stop default
然后去VitualBox软件中设置网络
如果点“设置”出来这么一个提示:不能为虚拟电脑default打开一个新的任务(网上关于它的说法很多,我理解是因为在命令行中如果default已经启动了,这里想再操作就不行,要先stop),网络上[5]有一个说法是需要安装一个服务:打开网络和共享中心–> 更改适配器设置
安装好后的效果是(有两个虚拟的网络适配器,都操作一下好了):
然后我再点“设置”就正常了,根据下图进行一个端口转发配置:ssh那一行是本来就有的。基本意思是说转发虚拟机的8888端口到主机host的8888端口。
然后启动defaut虚拟机:
docker-machine start default
当然启动之前你也可以看一下状态
docker-machine ls
查看之前已经退出了docker容器,有必要的你可以删除一些不要的了容器
然后启动已经Exited的容器:
docker start xx
(xx就是前面我起的时候取的name)
docker attach xx
(回车两次)
再起一下Jupyter的服务,然后去Windows下面用浏览器访问http://localhost:8888
就可以看到了Jupyter:
可以玩Python啦
到这里基本上就差不多了,只要不把你起的name叫做xx的容器 rm掉,那么以后关机再起来之前存的一些文件就依然还在,这些文件是存放在虚拟机的虚拟存储中的,实际上也是占了一块host主机的存储,只是是放在虚拟存储文件中的。
当然,我还折腾(zuo)了一下挂载host主机文件夹到docker中,这样你在docker中修改的文件就可以直接在Host主机下看见,反过来也一样,会更方便,可以直接在windows host主机上拷贝/编辑文件,然后去docker中运行了。
6、挂载Windows磁盘
因为我们用的虚拟机,所以呢实际上我们是(1)挂载Windows的磁盘到虚拟机上,(2)然后再从虚拟机上挂载到docker容器中。
(1)挂载Windows的磁盘到虚拟机上:
我发现实际上装好虚拟机以后,系统默认是会将C:\Users挂载到虚拟机上的/c/Users,这个可以从VirtualBox的设置–共享文件夹看到的默认有的(要看的话先要docker-machine stop default):
因此我在Windows下C:\Users里面建立了一个文件夹data,然后在虚拟机下是可以看见的
其他的地址如果需要的话你在共享文件夹里面照着设置一下,据说windows暂时只支持c盘的映射,未试过,因为我的本本只有一个c盘T_T,所以我也就不设置了,直接用C:\Users就好了。
(2)从虚拟机上挂载到docker容器中
这一步需要在第一次创建Container的时候打在命令中,因此有可能前面起的docker镜像又需要重新起了(前面那些都可以rm掉咯,或者换个名字yyy多起一个),下面的命令docker run命令是本文的终极版的:
docker run -it -p 8888:8888 -v /c/Users/data/:/data --name yyy tensorflow/tensorflow bash
-v命令把虚拟机的/c/Users/data目录挂载到Container中的/data目录,可以看到我在Windows上C:\Users\data编辑了一个ttt.txt文件,在Container里面直接就可以看见了:)
好了,这样就很完美啦(懒得再zuo了),大家有需要在自己的本本上玩玩TensorFlow和Python但是又不想装一大堆软件的,就试试用docker吧~~简直Perfect!
小贴士
- 如果不想用docker toolbox自带的命令行工具,想用类似Xshell这些工具访问虚拟机的,可以参考[6]。其中ssh 账号/密码
——docker / tcuser - 很多人觉得启动Docker Toolbox terminal后,发现在该终端中,无法进行复制、粘贴等操作,使用起来非常不方便。实际上是他们不会用哈,只需要用鼠标选中要复制的内容,然后鼠标左键点窗口左上角的图标:选择编辑,复制就行了,粘贴也是类似的。
参考资料
[1] http://blog.csdn.net/qq2712193/article/details/54576313
[2] http://www.docker.org.cn/dockerppt/106.html
[3] http://guide.daocloud.io/dcs/daocloud-9153151.html#docker-toolbox
[4] http://blog.csdn.net/seymour163/article/details/53236947
[5] http://blog.csdn.net/lh11077/article/details/51979663
[6] http://blog.csdn.net/tina_ttl/article/details/51372604#7docker中的jupyter
[7] https://segmentfault.com/q/1010000004583683
[8] https://segmentfault.com/q/1010000001707518
更多推荐
所有评论(0)