簡介
Docker的介紹和教學已有相當多的資源,但當我以為可以快速地建立環境、連上DB,卻不盡然
許多資源很棒,寫得很詳細,但正因對每一項解釋太詳細以致我無法很快找到我要的知識點,故在此提供這一回摸索後,我認為能較快建立環境的流程。
環境
因一直想寫寫爬蟲,較著名的Framework是基於Python的 - Scrapy,但其實Scrapy之外還要安裝蠻多東西的,故能用Docker幫我們整合當然再好不過
安裝
都安裝好後記得確認下Docker是否正常運行著,並打開Kitematic,會要求輸入Docker帳號密碼,沒有的可以申請一組
Mac使用者可看上方工具列小鯨魚點開,會亮綠燈且Docker is running
部署
總共會有三個Container來做示範,Scrapy/Postgres/Adminer
Scrapy
接著要建立Scrapy的Container,在搜尋框輸入「Scrapy」第一個就會是了(from scrapinghub)
點一下三個點點的More button會看到可以選擇Tag/Network,先選擇1.1-py3-latest
的Tag讓後續我們的版本一致,選好後就按下Create即可
因我在run流程第二遍時有發生HTTP 500 error在這步驟,可以參考這篇,登出Kitematic的Docker Account
載好後Kitematic就會自動run這個Container,可以在Setting看到些資訊
接著點擊上方的EXEC會將Container啟動在我們的終端機上,輸入scrapy
並按下Enter確認Container正常運作
可以先點左下方齒輪(設定),將Exec command shell選擇bash會比較習慣
Postgres
再來按New去搜尋Postgres
並選擇第一個官方的Image(在此是用10.1版本),一樣好了後利用EXEC在終端機上開啟並輸入psql
會有以下錯誤訊息
|
|
改成輸入預設的帳號就可以了
|
|
要離開psql就輸入\q
Adminer
接著New一個adminer的Container(官方的Image),選擇latest版,方便我們之後檢查是否有連上DB
好了後可以到Settings -> Hostname/Ports 確認下這Container的Published IP (有可能顯示的是localhost)
直接點藍色IP字段就會將Adminer打開在瀏覽器了
再來要輸入Server位置,我們要在Postgres的command line輸入
|
|
會得到類似以下資訊
第二段的172.17.0.3
就是Postgres在Docker內網的位置
為了要管理Container的Network,可以到Settings -> Network檢查該Container是屬於哪一組網路(預設是bridge)
要在同一組網路下連內網IP才有用
所以我們的三個Container都是在bridge情況下,要連對方用內網IP即可
故在Adminer介面只要輸入剛剛得到的Postgres內網IP & Username,按下Login就會連上了
環境架設就先到這裡!
專案
再來就拿實際專案來做示範,可以先clone我個人抓證交所資料的專案來測試
branch 選擇 docker-test
要讓Container讀取本機端的檔案,要設定Volumes
,而在Kitematic上不是每個Image都可以直接到Settings -> Volumes 去設定
本次的Scrapy就不行,Postgres可以
所以要教大家利用指令來啟動Container & 指定Volumes(原有的Scrapy Container不需要了)
Step 1
先在終端機上輸入指令,找到我們的scrapinghub/scrapinghub-stack-scrapy
Image,並記住Image ID
|
|
Step 2
在終端機輸入
|
|
-i
是讓Container的標準輸入保持打開;-t
是讓Docker分配一個虛擬終端(pseudo-tty)並綁定到Container標準輸入上-v
即是Volumes的設定,冒號左邊是本機端位置,要用絕對路徑,冒號右邊是Container內的路徑
按下Enter後我們就建立了一個新的Container,並可在Docker內讀取到我們的專案,於Kitematic中可以重整Containers List看我們剛剛建立的容器(Mac就按 Cmd+R)
這裡也有個插曲,當按重整沒有任何新的容器出現時,我要用管理員權限打開Kitematic才看得到剛剛建立的Container,但Postgres/Adminer就看不到了
Step 3
接著在Scrapy的Container輸入ls
就看得到twse資料夾,我們先cd
進去,然後先安裝要用的Module
再到專案底下的/twse/twse/settings.py 底部的DATABASE填入我們Postgres
的設定
如果發現你的DB和Scrapy是不同的Published IP
那你Scrapy要連DB就輸入Postgres的Published IP:Port
如果都一樣者只要先用ip address
找Postgres內網ip再輸入即可
記得到adminer去新建一個database,在此預設名字為twse
Step 4
最後輸入以下指令,就會開始抓2017/10/18 電子工業的資料了
結語
以上是個人認為剛開始用Docker會想嘗試的地方,Docker還有很多強大的用途直得我們去學習
也歡迎有興趣的人可以一起完成這twse專案