由於最近有用Python寫了幾隻網路爬蟲程式,但不想在工作電腦上定時執行,所以就研究如何在NAS跑Python程式,其實在Synology套件中心就可以找到Python相關套件,但考量資料安全和不想維護Python眾多套件(Package)在單一系統上,所以改採在docker上執行Python,底下就是詳細安裝方法。
-
打開主選單裡的Docker套件,點選倉庫伺服器,在搜尋欄位輸入python並按搜尋鍵後,可以看到第一名就是官方python套件,連結到官方網頁可以找到相關安裝說明(一開始我以為就是無腦地把他的docker套件安裝完再去執行容器就好,可是發覺我程式裡會用到相關python套件(例如:beautifulsoup4)都沒有安裝要怎麼跑…所以才認真去看官方網頁的說明XD)
-
研究了一下官方網頁的說明後,若要在包裝docker影像檔時就要把python環境一起建置好是需要透過SSH登入到NAS終端機執行相關指令(如何開始NAS SSH可以參考我的另一篇網誌的第3點說明)
-
連接SSH後新增Dockerfile設定檔(
vim Dockerfile
),內容如下:
-
FROM python:後接著你要安裝的python版本,具體說明可以參考官網的Image Variants說明(例如我的程式是在Python 3.7.9下開發的,為了避免版本相容問題,我會在這邊設定成3.7.9)
-
WORKDIR是設定docker下的工作目錄,這邊可以不改,後面建置docker容器時再設定對應的NAS實體工作目錄
-
下面三行是包裝docker影像檔時建置python環境會讀取requirements.txt透過pip安裝相關python套件
-
最後是設定執行docker容器時預設要執行的python程式名稱,這裡可以不改,等後面建置docker容器時再設定執行指令
FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [ "python", "./your-daemon-or-script.py" ]
-
接著新增前面說的requirements.txt把你要新增的python套件名稱填入,例如我的程式有用到requests和beautifulsoup4等套件,則填入並儲存
requests beautifulsoup4
-
準備好Dockerfile和requirements.txt後就可以執行底下指令包裝docker映象檔,其中python3可以改成你想要的映象檔名稱,最後的
.
不要漏掉XDsudo docker build -t python3 .
-
若沒問題應該可以看到如下圖結果,其中特別反白python3:latest就是包裝好的docker映象檔名稱
-
接著打開主選單裡的Docker套件,選映象檔,應該就可以看到剛剛包裝的名稱,選擇再按上方佈署按鈕
-
在新增容器視窗,再按進階設定按鈕,要進行相關參數設定
-
進入進階設定視窗後,點選儲存空間頁面,這裡要設定工作目錄,點選新增資料夾按鈕選定之後python程式和資料存放實體目錄(例如: docker/python),再填入掛載路徑
/usr/src/app
(就是前面Dockerfile裡的WORKDIR對應目錄) -
最後點選環境設定頁面,在下方指令輸入要執行的python程式,例如:
python ./test.py
,最後再按套用儲存進階設定和儲存容器後就完成整個設定,再把要執行的python程式放到WORKDIR實體目錄就可以啟動容器執行^_^
補充說明 - 安裝後如何進行python套件管理
-
開啟安裝好的python容器視窗,在容器啟動狀態下選擇上方的終端機頁面
-
此時在終端機頁面點選左上方的新增終端機,接著會看到左方多了bash選項,點選後就可以進入終端機視窗,此時就可以輸入
pip install [套件名稱]
安裝新套件或其他pip相關指令進行python套件管理
comments powered by Disqus