[完美解決]如何在windows安裝docker toolbox,使用tensorflow,Jupyter Notebook,各種問題的解決方案
上兩週心血來潮想在自己的Surface(Win10 Home系統)上用TensorFlow和Python,但是安裝實在是太麻煩了…就想到能不能在Windows上用docker直接執行linux環境的TensorFlow?網上一查還真有,然後很開心的下載安裝…誰知進入了一個超級大坑T_T,經過斷斷續續幾次的研究(折騰)終於在今天搭建完成環境,在本文中給一個詳細的教程,幫助大家少走彎路~!
這是一個2018年的新年禮物!
推薦用迅雷下載,或者其他下載軟體下載,用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,地址:
然後呢,就可以往下走啦…還有好幾個坑
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,下面這樣就正常了:
然後你就可以看見起了一個叫default的虛擬機器,IP地址是192.168.99.100(我這裡是,可能你的不一定完全一樣,沒關係。可以在win下面ping通的)
OK,到這裡docker就安裝好了,大家可以用docker啦,後面就開始使用TensorFlow了。docker下用TensorFlow是一樣的,所以有經驗的同學應該很快就搞定。
3、安裝TensorFlow
根據你需要下載的映象,先在docker hub上搜索一下,比如我要搜尋TensorFlow,只要輸入docker search tensorflow
然後pull第一個官方的映象到本地
docker pull tensorflow/tensorflow
點進去,註冊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後,發現在該終端中,無法進行復制、貼上等操作,使用起來非常不方便。實際上是他們不會用哈,只需要用滑鼠選中要複製的內容,然後滑鼠左鍵點視窗左上角的圖示:選擇編輯,複製就行了,貼上也是類似的。