您的位置:首页 > 运维架构 > Docker

[完美解决]如何在windows安装docker toolbox,使用tensorflow,Jupyter Notebook,各种问题的解决方案

2018-01-01 15:53 1341 查看
上两周心血来潮想在自己的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: