Nishant Bhardwaj

在設定好 Jenkins 並建立第一個 Declarative Pipeline 之後,下一步是準備機器來建置 Docker 映像。

由於我的 pipeline 最終將會從 GitHub 複製程式碼、建置 Docker 映像,並推送到容器 registry,因此 Jenkins 需要存取 Docker。如果沒有安裝 Docker,docker build 階段將會失敗,因為 Jenkins 無法執行 Docker 指令。

安裝 Docker

在我的 Ubuntu 機器上,我使用以下指令安裝 Docker:

sudo apt update
sudo apt install docker.io -y

安裝完成後,我使用以下指令驗證:

docker --version

這確認 Docker 已成功安裝並可供使用。

驗證 Docker 安裝

安裝 Docker 只是工作的一半。下一步是檢查目前的使用者是否有權限使用 Docker。

執行:

docker ps
預期輸出

如果一切設定正確,你應該會看到類似以下的內容:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

即使沒有正在執行的容器,顯示如上空的表格也表示 Docker 正常運作。

如果出現權限錯誤怎麼辦?

如果你看到類似以下的錯誤:

permission denied while trying to connect to the Docker daemon socket

這表示目前的使用者沒有權限存取 Docker daemon。

首先,檢查你目前登入的使用者名稱:

whoami

範例輸出:

nishant

現在將你的使用者加入 docker 群組:

sudo usermod -aG docker $USER

這個指令的作用是什麼?

usermod 修改使用者帳戶。
-aG 表示將使用者附加到補充群組,而不移除現有群組。
docker 是有權限與 Docker daemon 通訊的群組。
$USER 自動指向目前登入的使用者名稱。
套用變更

群組成員資格不會立即生效。

你有兩個選擇:

選項 1(建議):

登出你的 Ubuntu 工作階段,然後重新登入。這會重新整理你的使用者群組,是最可靠的方法。

選項 2:

只需重新啟動終端機工作階段(或開啟新的終端機)。在許多情況下,仍需要登出並重新登入才能使變更完全生效。

再次驗證

再次執行指令:

docker ps

如果你現在看到空的容器清單而不是權限錯誤,表示 Docker 已正確設定,你可以從 Jenkins pipeline 中使用它。

學習筆記:這是初學者在安裝 Docker 後最常遇到的問題之一。安裝成功,但 Docker 指令失敗,因為使用者尚未加入 docker 群組。