Synology NAS Docker分享 – Python(2021/06/23更新)

發表 by Tesla on 2020-10-05

由於最近有用Python寫了幾隻網路爬蟲程式,但不想在工作電腦上定時執行,所以就研究如何在NAS跑Python程式,其實在Synology套件中心就可以找到Python相關套件,但考量資料安全和不想維護Python眾多套件(Package)在單一系統上,所以改採在docker上執行Python,底下就是詳細安裝方法。

  1. 打開主選單裡的Docker套件,點選倉庫伺服器,在搜尋欄位輸入python並按搜尋鍵後,可以看到第一名就是官方python套件,連結到官方網頁可以找到相關安裝說明(一開始我以為就是無腦地把他的docker套件安裝完再去執行容器就好,可是發覺我程式裡會用到相關python套件(例如:beautifulsoup4)都沒有安裝要怎麼跑…所以才認真去看官方網頁的說明XD)

  2. 研究了一下官方網頁的說明後,若要在包裝docker影像檔時就要把python環境一起建置好是需要透過SSH登入到NAS終端機執行相關指令(如何開始NAS SSH可以參考我的另一篇網誌的第3點說明)

  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" ]
    
  1. 接著新增前面說的requirements.txt把你要新增的python套件名稱填入,例如我的程式有用到requests和beautifulsoup4等套件,則填入並儲存

    requests
    beautifulsoup4
    
  2. 準備好Dockerfile和requirements.txt後就可以執行底下指令包裝docker映象檔,其中python3可以改成你想要的映象檔名稱,最後的 . 不要漏掉XD

    sudo docker build -t python3 .
    
  3. 若沒問題應該可以看到如下圖結果,其中特別反白python3:latest就是包裝好的docker映象檔名稱

  4. 接著打開主選單裡的Docker套件,選映象檔,應該就可以看到剛剛包裝的名稱,選擇再按上方佈署按鈕

  5. 新增容器視窗,再按進階設定按鈕,要進行相關參數設定

  6. 進入進階設定視窗後,點選儲存空間頁面,這裡要設定工作目錄,點選新增資料夾按鈕選定之後python程式和資料存放實體目錄(例如: docker/python),再填入掛載路徑/usr/src/app(就是前面Dockerfile裡的WORKDIR對應目錄)

  7. 最後點選環境設定頁面,在下方指令輸入要執行的python程式,例如:python ./test.py,最後再按套用儲存進階設定和儲存容器後就完成整個設定,再把要執行的python程式放到WORKDIR實體目錄就可以啟動容器執行^_^

補充說明 - 安裝後如何進行python套件管理

  1. 開啟安裝好的python容器視窗,在容器啟動狀態下選擇上方的終端機頁面

  2. 此時在終端機頁面點選左上方的新增終端機,接著會看到左方多了bash選項,點選後就可以進入終端機視窗,此時就可以輸入pip install [套件名稱]安裝新套件或其他pip相關指令進行python套件管理


comments powered by Disqus