docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?
數(shù)據(jù)科學開發(fā)環(huán)境配置起來讓人頭疼,會碰到包版本不一致、錯誤信息不熟悉和編譯時間漫長等問題。這很容易讓人垂頭喪氣,也使得邁入數(shù)據(jù)科學的這第一步十分艱難。而且這也是一個完全不常見的準入門檻。
還好,過去幾年中出現(xiàn)了能夠通過搭建孤立的環(huán)境來解決這個問題的技術(shù)。本文中我們就要介紹的這種技術(shù)名叫Docker。Docker能讓開發(fā)者簡單、快速地搭建數(shù)據(jù)科學開發(fā)環(huán)境,并支持使用例如Jupyter?notebooks等工具進行數(shù)據(jù)探索。
要使用Docker,我們要先下載含有相關(guān)包(package)和數(shù)據(jù)科學工具的鏡像文件。之后,我們可以通過該鏡像,在數(shù)秒之內(nèi)就啟動一個數(shù)據(jù)科學開發(fā)環(huán)境,免去了手動安裝包的麻煩。這個環(huán)境,也被成為Docker容器(container)。容器解除了配置的問題——當你啟動一個Docker容器后,它就已經(jīng)處于了良好的狀態(tài),所有的包都是可以正常運轉(zhuǎn)的。
除了降低進入數(shù)據(jù)科學的門檻之外,Docker還可以讓我們快速搭建擁有不同Python版本和安裝了不同包的孤立環(huán)境,不像虛擬環(huán)境(virtualenv)那樣還要重新安裝包。
在本文中,我們將介紹Docker的基礎(chǔ)知識,如何安裝Docker以及如何利用Docker容器快速地在本地機器上搭建數(shù)據(jù)科學環(huán)境。
虛擬機
能夠創(chuàng)建虛擬機的軟件已經(jīng)問世數(shù)十年,可以讓你在本地電腦上模擬其他的系統(tǒng)環(huán)境。舉個例子,即使你的電腦運行的是Windows操作系統(tǒng),你仍可以通過虛擬機運行Linux系統(tǒng)。這可以讓你在不重裝系統(tǒng)的前提下,使用Linux——也就是說,Linux系統(tǒng)是虛擬化運行的,所以你可以從Windows系統(tǒng)訪問虛擬機。基本上,你可以在點擊該軟件的程序圖標之后,看到彈出的窗口中乃是一個Linux系統(tǒng)桌面。而虛擬機需要鏡像來啟動,也就是你必須先擁有一個目標系統(tǒng)的鏡像,才能啟動相應的虛擬機。如果你想使用Linux,你使用的鏡像就得包含創(chuàng)建Linux環(huán)境所必須的全部文件。
容器
盡管虛擬機有諸多好處,例如能夠使在Windows平臺進行Linux開發(fā)成為現(xiàn)實,但是也有著自身的缺陷。首先,虛擬機的啟動時間很長,要消耗大量的系統(tǒng)資源。另外,在利用鏡像創(chuàng)建完虛擬機中,很難在安裝完所需要的包后,再將這個鏡像保存,創(chuàng)建為新的鏡像。而Docker提供的Linux容器,則通過讓多個孤立環(huán)境在同一臺機器上運行,解決了這個問題。你可以把容器看作是一種更快、更簡單地使用虛擬機的方法。
但是,容器的使用卻有一點麻煩,而且管理和發(fā)布容器鏡像也不容易。作為開發(fā)人員,我們希望能夠快速下載并啟動一個擁有指定包和工具配置的數(shù)據(jù)科學環(huán)境。例如,你肯定會希望能快速啟動一個安裝了Jupyter notebook、spark和pandas的容器。
Docker
Docker容器的里層包裹的是Linux容器(a layer over Linux containers),可以支持更簡單地對容器進行管理和發(fā)布。使用Docker,可以很容易地下載具備相應包的鏡像,并且快速啟動。另外,Docker是跨平臺的,支持包括Mac、Windows和Linux等系統(tǒng)。
作為創(chuàng)建孤立Python環(huán)境的另一種方式,虛擬環(huán)境(virtual environment)也有這些優(yōu)勢。但是Docker相較于虛擬環(huán)境的主要優(yōu)勢有:
能夠快速啟動。如果你想馬上就開始進行數(shù)據(jù)分析,使用Docker就免去了你等待各種包進行安裝的時間。
配置測試無誤。很多時候,要正常安裝Python包會,需要以安裝某些系統(tǒng)包為前提,并只有在進行相應設(shè)置后才能正常使用。如果設(shè)置不當,會引起一些很奇怪的錯誤。但是使用Docker后,這些包就已經(jīng)配置好了,可以立即使用。
跨平臺一致性。Python中的包是可以跨平臺使用的,但是在Windows和Linux平臺下有些不同,而且還有部分依賴包無法在Windows中安裝。但是由于Docker容器運行的都是Linux環(huán)境,所以它們是高度一致的。
能夠設(shè)置checkpoint并且進行恢復。你可以往Docker鏡像中安裝包,然后將那個checkpoint下的環(huán)境創(chuàng)建成一個新的鏡像。這讓你能夠快速撤銷或者回滾配置。
運行一個Docker鏡像,就相當于創(chuàng)建了一個Docker容器。在本文中,我們在容器中運行一個Jupyter notebook,然后通過瀏覽器界面來處理數(shù)據(jù)。
安裝Docker
第一步就是安裝Docker。Docker官方為Windows和Mac用戶提供了一個簡便安裝過程的圖形界面安裝器。下面是每個操作系統(tǒng)的安裝指南。
在安裝時,你需要使用shell命令提示符(shell prompt)。shell命令提示符也被稱為終端或命令行,是在你的機器上通過文本界面而非圖形界面運行命令的一種方式。例如,你可以在Windows系統(tǒng)中雙擊記事本就可以打開一個文本編輯器,也可以在Linux終端中輸入nano達到這個目的。Docker提供了一個預先配置好的shell,可以用來運行Docker命令。請按照下面的方法操作:
Mac OS —— 從Launchpad中打開Docker Quickstart Terminal程序。詳情見本篇文章。
Linux —— 打開任意bash終端,就可以使用docker命令。
Windows —— 雙擊桌面上的Docker QuickstartTerminal程序的圖標。詳情見本篇文章。
下文在提到需要運行Docker命令或輸入某個命令時,你都需要使用這個shell命令提示符。
下載鏡像
下一步是下載你需要的鏡像。下面是我們網(wǎng)站(dataquestio)目前提供的數(shù)據(jù)科學開發(fā)專用鏡像:
dataquestio/python3-starter?—— 這個鏡像已經(jīng)安裝好了Python 3, Jupyter notebook和許多其他流行的數(shù)據(jù)科學庫,包括numpy,pandas,scipy,scikit-learn和nltk。
dataquestio/python2-starter?—— 這個鏡像已經(jīng)安裝好了Python 2, Jupyter notebook和許多其他流行的數(shù)據(jù)科學庫,包括numpy,pandas,scipy,scikit-learn和nltk。
你可以通過輸入docker pull IMAGE_NAME命令,下載相應的鏡像。如果你想下載dataquestio/python3-starter這個鏡像,那么你需要在終端輸入docker pull dataquestio/python3-starter命令。輸入這段命令后,程序會自動從Docker Hub下載鏡像。Docker Hub與Github類似,不過卻是Docker鏡像的一個中樞。它會將相應的鏡像文件下載至你的本地機器,這樣你才能利用該鏡像創(chuàng)建容器。
新建一個文件夾
在本地創(chuàng)建一個文件夾,用于存放notebooks。這個文件夾中將儲存你所有的工作文件,并會持續(xù)存在于你的機器中,即使是你銷毀了docker容器。在這里,我們將創(chuàng)建下面這個文件夾,/home/vik/notebooks。
運行鏡像
鏡像下載完成后,你可以通過docker run運行該鏡像。我們還需要傳入一些選項,確保鏡像配置正確。
-p 選項用于設(shè)置虛擬機的端口,讓我們可以在本地訪問Jupyter notebook服務器。
-d 選項用于以detached模式運行容器,也就是作為背景進程運行。
-v 選項讓我們指定在本地機器中使用哪個文件夾存儲notebook。
完整的運行命令是類似這樣的:
docker run -d -p 8888:8888 -v /home/vik/notebooks:/home/ds/notebooks dataquestio/python3-starter
你應該將/home/vik/notebooks更改為你用于存儲文件的地址。另外,應該把dataquestio/python3-starter更改為自己喜歡的docker鏡像。
執(zhí)行docker run命令將會創(chuàng)建一個Docker容器。這是與你的本地機器相隔絕的,也可以把它看作是一臺單獨的電腦。在容器內(nèi)部,會運行一個Jupyter notebook服務器,并可以讓我們使用許多數(shù)據(jù)科學工具包。
另外,docker run命令也會在終端打印出容器的編碼(container id),在通過其他docker容器對該容器進行修改時,就必須要使用這個編碼。在下文中我們稱該編碼為容器編碼。
查看notebook服務器
如果你的系統(tǒng)是Linux,那么下一步非常簡單——只需要在瀏覽器中打開localhost:8888,之后應該就能看到運行中的notebook。如果你使用的是Windows或OSX,之前也按照Docker官方安裝指南進行了操作,并且安裝過程中使用了docker-machine,那么本地機器的名稱是default,運行docker-machine ip default命令就可以得知docker容器的ip。如果使用了其他的名字,例如dev,那在命令中將default替換為dev即可。接下來,在瀏覽器中訪問CONTAINER_IP:8888就可以看到notebook(將CONTAINER_IP替換為你的容器編碼)。
創(chuàng)建一個notebook
到了這一步,你可以創(chuàng)建一個新的Jupyter notebook測試下這個孤立的開發(fā)環(huán)境。試試輸入下面這個scikit-learn的例子:
from sklearn import datasets
from sklearn.cross_validation import cross_val_predict
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inline
lr = linear_model.LinearRegression()
boston = datasets.load_boston()
y = boston.target
predicted = cross_val_predict(lr, boston.data, y, cv=10)
fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()
添加數(shù)據(jù)文件
如果你想往開發(fā)環(huán)境中添加數(shù)據(jù)文件,你有三個選擇。第一個選擇,就是將文件放在你之前創(chuàng)建用來存放notebook的文件夾中。你放那里的任何文件將可以自動通過Jupyter notebook中訪問。
第二種選擇就是使用docker cp命令。docker cp可以從本地機器復制文件至容器中,反之亦然。假設(shè)你想拷貝/hom/vik/data.csv文件至一個id為4greg24134的容器中,你可以輸入下面的命令:
docker cp /home/vik/data.csv 4greg24134:/home/ds/notebooks
這會將data.csv文件拷貝到容器中用于存放notebook的文件夾中。當然,你可以選擇將文件放到容器中的任何地方,但是把它們放在存放notebook的文件夾忠厚,你就可以輕松地通過Jupyter notebook訪問這些文件了。
第三個選擇就是使用Jupyter notebook首頁右上方的upload按鈕。這可以讓你選擇一個文件,并上傳到容器中用于存放notebook的文件夾中。
不管你使用哪種方法,要想在Jupyter notebook中加載文件,需要按照類似下面的方式進行:
import pandas
data = pandas.read_csv("data.csv")
復制容器中的數(shù)據(jù)文件
你可能會需要從容器中拷貝文件至本地機器。最容易的辦法就是把文件放置在/home/ds/notebooks文件夾中,這樣的話這些文件就會自動映像到本地機器。
另一種方法也就是利用docker cp命令。假設(shè)你想從id為4greg24314的容器中,把/home/ds/notebooks/data.csv文件拷貝至本地機器的/home/vik/文件夾中,你可以輸入下面的命令:
cp 4greg24134:/home/ds/notebooks/data.csv /home/vik/data.csv
最后一種方法就是使用Jupyter界面中的download選項。在網(wǎng)頁模式下點擊一個不是notebook的文件,將會將其下載至本地。如果你已經(jīng)打開了一個notebook,那么可以先點擊File,然后選中download as就可以下載至本地。
安裝更多的工具包
如果你想在容器中安裝更多的工具包,你可以通過正常的bash命令行命令就可以實現(xiàn)。要想在容器中執(zhí)行這些命令,你需要運行docker exec命令。這個命令接受容器的id作為參數(shù),以及一個期望運行的命令。例如輸入docker exec -it 4greg24134 /bin/bash將會在編碼為4greg24134的容器中開啟一個shell命令提示符。-it選項確保我們在容器中打開了一個輸入會話,并且可以輸入命令。
在運行docker exec命令之后,你就會看到容器中的shell命令提示符出現(xiàn)。容器此時正通過一個名為ds的虛擬環(huán)境運行Python程序,這個虛擬環(huán)境已經(jīng)是處于激活狀態(tài)的。
接下來,只需要輸入pip install PACKAGE_NAME就可以安裝其他的工具包。例如,你可以使用pip install requests來安裝requests。
當你希望退出容器的shell終端時,只需要輸入exit即可。
關(guān)閉docker容器
在完成數(shù)據(jù)處理工作之后,你就可以通過docker rm -f CONTAINER_ID來停止docker容器。你應該輸入之前獲得的容器編碼。如果你忘了,你可以運行docker ps查看。容器停止運行之后,notebooks會繼續(xù)存放在你本地用于存放的文件夾中。
更進一步
Docker鏡像是通過Dockerfile創(chuàng)建的。Dockerfile指定了鏡像中應該安裝的包和工具。通過修改Dockerfile,你就可以改變鏡像默認按照的包和工具。
如果你想在本文中所使用的鏡像基礎(chǔ)上做一定修改,可以向我們的Github倉庫提交PR,這個倉庫中包含了鏡像的Dockerfile。我們歡迎大家參與改善當前的鏡像,或是添加其他安裝了非Python包和工具的鏡像。
總結(jié)
以上是生活随笔為你收集整理的docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 2d绘图 stroke_Jav
- 下一篇: php ip2long bug,PHP代