前言
Synology NAS 內建的 Docker 套件雖然提供了便利的圖形化介面,讓使用者可以輕鬆從 Docker Hub 下載與管理映像檔,但對於需要自行客製化 Docker 映像檔的進階使用者來說,其功能顯然有所不足。這篇文章將探討在 Synology NAS 上自製 Docker 映像檔的可行方式,並提供詳細的操作步驟。
使用 Portainer CE 來管理 Docker CE
Portainer 是一款開源的 Docker 管理工具,提供了功能強大的圖形化介面,能彌補 Synology Docker Manager 的不足 。雖然在 Synology NAS 上可以透過 Docker Manager 介面來下載並使用 Portainer,但在實際測試中,要讓 Portainer 成功與 NAS 上的 Docker 服務通訊,似乎存在技術上的困難 。主要原因在於,Portainer 需要存取 Docker 服務啟動後產生的.sock 檔案,而 Synology NAS 上的 Docker CE 是作為一個套件運行的,其 .sock 檔案位置難以直接找到並正確掛載,因此這種方式目前看來仍不可行 。
透過 SSH 方式自製 Docker 映像檔
如果 Portainer 不適用,另一個可行且更直接的方式是透過 SSH 登入 Synology NAS,並使用命令列來自行製作映像檔 。目前這個方法是可行的,而且操作彈性更高 。
- 啟用 SSH 服務
首先,你必須在 Synology NAS 的控制台中啟用 SSH 登入功能,並使用一個擁有Administrators 群組權限的帳號來登入 。 - 準備 Dockerfile
使用 SSH 連線後,你可以搭配Dockerfile 來產生 Docker 映像檔 。Dockerfile 是一個純文字檔,包含了建置映像檔的所有指令。這能讓你的建置流程可重複且自動化。 - 帳號 UID 與 GID 的重要性
在製作 Docker 映像檔時,有一個重要的細節需要注意:
帳號的 UID (User ID) 和 GID (Group ID) 。如果你希望未來啟動的 Docker 容器能夠正確存取 Synology NAS 上的共享資料夾,建議你先在 NAS 上查詢你常用的帳號 UID 和 GID。例如,如果你的 NAS 帳號是NAS01,可以先查詢其 UID 和 GID。接著,在 Dockerfile 中建立帳號時,直接指定與 NAS 上相同的 UID 和 GID。這樣可以確保當你將 NAS 上的目錄掛載到容器中時,檔案權限不會出現問題 。
- 範例 Dockerfile
以下是一個簡單的 Dockerfile 範例,展示如何建立一個 Ubuntu 映像檔並設定 UID 與 GID:
# 使用官方的 Ubuntu 映像作為基礎
FROM ubuntu:latest
# 在此替換為你在 NAS 上查詢到的 UID 和 GID
ARG PUID=1026
ARG PGID=101
# 建立使用者群組並將使用者加入
RUN groupadd -g $PGID nas_user && \
useradd -u $PUID -g nas_user -s /bin/bash -m nas_user
# 切換到新建立的使用者
USER nas_user
# 設定工作目錄
WORKDIR /home/nas_user
# 在此加入你需要執行的指令,例如安裝軟體
# RUN apt-get update && apt-get install -y vim
- 執行 Docker Build
將上面的 Dockerfile 儲存為 Dockerfile 檔案,然後在 SSH 終端機中,切換到該檔案所在的目錄,執行以下指令來建置映像檔:
docker build -t my-ubuntu-image .
其中,my-ubuntu-image 是你為映像檔取的名稱。
結語
雖然 Synology NAS 的 Docker Manager 介面旨在透過圖形化來簡化使用流程,但它確實缺乏自製映像檔的功能。目前看來,透過 SSH 登入並使用docker build 指令,是自製 Docker 映像檔最可行的方式 。這種方式雖然需要一些命令列操作的知識,但提供了更高的彈性和控制權。
