分享程式代碼相關筆記
目前文章總數:197 篇
最後更新:2025年 09月 13日
對許多剛接觸 Docker 的開發團隊來說,CLI 指令操作門檻高、錯誤難以排查,是導入容器化的第一道障礙。
Portainer 作為一款輕量級的 Docker 可視化管理工具,提供直覺的網頁介面,讓用戶能夠輕鬆部署應用、管理權限、監控節點狀態,甚至跨主機操作容器。
而在免費的 CE 版本中,也包含了許多足以應對中小型開發需求的實用功能。
本篇文章旨在介紹 Portainer CE (Community Edition) 的幾個核心功能,包含以下功能:
項目 | 說明 |
---|---|
1. 連接多台機器的環境管理 | 示範如何將多台 Docker 主機(本地或遠端)加入 Portainer 的環境中集中管理,適合有多節點需求的小型開發或測試團隊使用。 |
2. 使用者與群組權限設定 | 介紹 Portainer CE 中的使用者與群組管理機制,並說明在 CE 版本下如何進行基本的角色分工與存取控制,CE 主要用於訪問多台機器的檢視。 |
3. 應用模板 (App Templates) | 解說如何使用 Portainer 提供的預設應用模板快速部署常用應用,以及自訂模板的建立方式,加速開發測試環境的搭建流程。 |
4. Stack 管理 | 說明如何透過 Portainer 建立、部署與管理 Docker Stack,包括 YAML 編排、環境變數設置與服務版本控制,讓多容器應用可以更有條理地管理。 |
最終目標:讓讀者了解如何使用 Portainer 提升容器部署與管理的效率,並協助團隊在不熟悉指令操作的情況下,快速上手 Docker 生態系。
本篇主要適用的對象如下,適合團隊剛開始導入 Docker 容器管理工具時參考。
1. Docker 有基本認識,但不熟悉 CLI 操作的開發者 |
2. 希望建立簡單容器化管理介面的小型或中型團隊 |
3. 正在尋找免費工具管理多台 Docker 主機環境的 IT 或 DevOps 工程師 |
4. 正在評估 Portainer 是否能作為內部部署工具的技術決策者 |
以下是團隊與規模的初步評估,若開發團隊中有不熟悉容器化管理成員,可以採用 Portainer 讓成員快速熟悉。
待整體熟系容器化生態系後,可以逐步減少 Portainer 的依賴。
團隊屬性 | 建議管理方式 |
---|---|
新創 / 團隊小 / 成員不熟 Docker | ✅ Portainer Template + Webhook |
中大型團隊 / DevOps 團隊健全 | ✅ Jenkins + GitOps / SSH 部署 |
混合團隊(部分人 DevOps,部分人偏開發) | ✅ Portainer + Jenkins 整合(用 Jenkins 下達 Webhook 給 Portainer) |
我們目前已在 192.168.51.93 安裝了 Portainer,但若有多台機器要管理話,就需要對其他機器做設定
如下圖,我們還有一台機器 192.168.51.94 當前已安裝了 Docker
本節目標: 192.168.51.93 可以監控 192.168.51.94 機器,可以不用登入 192.168.51.94 就能觀察到該機器的 Docker Container 狀態
※並且可以有視覺化的方式監控,對剛熟悉者較友善
登入 Portainer -> 選擇左下角的 Settings 中的 Enviroemnt -> 選擇右上角的 Add enviroment
目前管理只有看到自己的 local
進入後,選擇 Docker Standalone -> 選擇按鈕 Start Wizard
目的是可以訪問另一台已安裝 Docker 的機器
選擇 Agent -> 點擊 Copy Command
此語法是用來安裝另一台被監控機器設定為 Agent ,使得本機的 Portainer 可以訪問被監控機器
將從 Portainer 複製的語法(監控機器),貼上到另一台 被監控的機器 -> 執行 Shell 腳本 -> 安裝完成
補充:若被監控的機器 Port:9001 已經被占用,需要調整 Port 號
回到 Portainer (監控機器),將被監控的機器資訊貼上,以當前的範例來看會是:
Name | http://192.168.51.94:9001 |
Enviroment address | 192.168.51.94:9001 |
填完資訊 -> 點擊 Connect
添加完成:
最後回到 Enviroment 頁面,就會出現被監控機器的資訊,我們點擊進入 http://192.168.51.94:9001
進入後可以訪問到遠端的被監控機器,為了方便驗證,從 192.168.51.94 也安裝 Portainer 進行比對,容器資訊會是一致
未來只要一台機器安裝 Portainer 就可以監控多台遠端安裝 Docker 的機器
2. 使用者與群組權限設定 | 介紹 Portainer CE 中的使用者與群組管理機制,並說明在 CE 版本下如何進行基本的角色分工與存取控制,CE 主要用於訪問多台機器的檢視。 |
如果使用 Portainer Community Edition(社群免費版本),在帳戶與權限設定中有以下限制:
簡言之,CE 版本無法到細部的權限、管理設定
本節目標:設定使用者權限,並達到開放可監控指定單一機器 (這裡用 192.168.51.94 可訪問 ; 但 192.168.51.93 不可訪問)
功能 | 是否可用於 Portainer CE |
---|---|
建立多個使用者帳號 | ✅ |
指定團隊只能存取某一主機 | ✅ |
控制誰可以部署 Stack | 🚫 |
限制使用者只能查看容器 | 🚫 |
自訂操作權限(如不允許刪除) | 🚫 |
左邊 Menu 選擇 Users -> Add User 資訊填入 -> Create User -> 建立完成
左邊 Menu 選擇 Teams -> Add a new team 資訊填入 -> Create team -> 建立完成
左邊 Menu 選擇 Teams -> 拉到畫面最下方 -> 選擇剛剛建立好的 Team -> 進入
進入後 -> 左下方將需要添加到此 Team 的 User -> 選擇 +Add
並且添加後會轉移到 Team Members
左邊選擇 Enviroment -> 出現當前所有的機器清單 -> 選擇 192.168.51.94:9001 這台機器(被監控機器) -> 選擇 Manage Access
進入管理介面,可以選擇以群組為單位的 組名稱 ; 或者以單一用戶為單位的 用戶名,這邊可進行添加
※添加後該用戶才會有訪問該機器的權限
添加後如下畫面:
我們以剛剛新建的帳號進行登入 192.168.51.93 (監控機器)
可以看到只能訪問 192.168.51.94:9001 被監控機器,與 Step 6. 設定相呼應
為了使用者友善, Portainer 提供常用的預設模板,讓使用者可以很輕鬆的建立容器,不用下任何指令
本節目標: 可以快速運行 Mysql 容器 (還有很多,以 Mysql 資料庫舉例),以及建立自訂模板
進入一台機器後(這裡登入監控機,local) -> 左邊選擇 App Templates -> 選擇 Mysql
填入此容器的名稱 -> 選擇 Deploy -> Mysql 資料庫的容器就建立完成了
補充:若想要避免 Port 衝突可以調整宿主機與容器的對應 Port 號
回到容器檢視,可以發現我們已快速的安裝 Mysql,但問題是預設 App Templates 不能選擇要安裝的版本
這時就需要用到 Customer App Templates
如果想要安裝特定版本的 Mysql 以及設定一些參數,這就需要用到 Custom Templates,會開始用到 .yml 腳本
因此此功能會是熟悉的開發者建立,讓剛接觸的使用者使用
左邊選擇 App Templates -> Custom Templates -> 並且選擇 Create Custom template
進入後在 Title 與 Description 輸入文字,並且目前目標是 Mysql 8.0 可以使用以下的 yml 語法腳本
都完成後,拉到最下方執行 Deploy
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: MySecretPass123
MYSQL_DATABASE: demo
MYSQL_USER: user123
MYSQL_PASSWORD: userpass456
volumes:
- /data/mysql:/var/lib/mysql
進入後在 Title 與 Description 輸入文字,並且目前目標是 Mysql 8.0 可以使用以下的 yml 語法腳本
都完成後,拉到最下方執行 Cretate Template
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: MySecretPass123
MYSQL_DATABASE: demo
MYSQL_USER: user123
MYSQL_PASSWORD: userpass456
volumes:
- /data/mysql:/var/lib/mysql
如果語法都正確,再次回到 Customer App Templates 會看到剛剛建立的模板,點擊進入
進入後可以直接點擊 Deploy the Stack
我們從 Customer App Templates 建立的容器,會在 Stack 頁籤中統一管理,點擊檢查
可以看到現在是我們客製化的 Mysql 8.0 容器,並且未來想要對容器重建,可以不需要任何指令,只需要從 GUI 介面中就可以建立。
以下是 Tempalte 與 Stack 生命週期的關係:
Customer Templates → 選擇範本 → 設定參數 → 部署為 Stack → 實際運行
並且以下是 2 者的特性比較:
項目 | Stack | Customer Templates |
---|---|---|
性質 | 實際運行的應用程式實例 | 可重複使用的部署範本 |
用途 | 部署和管理容器化應用 | 建立標準化的部署模板 |
狀態 | 動態(運行中/停止) | 靜態(定義檔案) |
由此可知,Stack 的建立會經由 App Templates 產生
本節目標: Stack 的批次管理容器使用方式、以及批次更新語法並且重建容器
進入一台機器後(這裡登入監控機,local) -> 左邊選擇 Stack -> 選擇在 第四部份 建立的 mysql8
進入後,會有該 Stack 底下的所有容器,並且上方有 3 個按鈕:
項目 | 說明 |
---|---|
Stop this Stack | 當這個 Stack 啟動時,會顯示此按鈕,執行後會將該 Stack 底下所有的容器一併停止 |
當這個 Stack 停止時,會顯示 Start this Stack | |
Delete this Stack | 刪除該 Stack 底下的所有 Container 容器 |
Portainer 中的 Stack 可以批次管理相關聯的 Container
上方的 Editor -> 選擇進入
我們可以觀察到左邊是在 第四部份 建立的 Customer Templates 語法
為了Demo 將 Port 號改為 3800 ; Mysql Image 版本改為 8.1
調整完畢後,拉到下方的 Actions -> 點擊 Update the stack 按鈕
確認更新 -> 接著會立即重新部署新版本的語法
最後回到 Stack 觀察,可以發現該 Stack 下的 Container 容器已經重新部署
對於剛接觸熟系容器,完全不需要執行任何 Shell/Batch 的 docker 指令,即可輕鬆重新部署容器
Portainer 是一套 Docker 管理介面,它只管理透過它自己部署或註冊進來的資源。
若我們從 Ubuntu 中,執行 docker-compose.yml 腳本,雖然 Portainer 也會感應到 Stack
但因為沒有透過 Portainer 註冊/部署 因此部會列為控管
如下圖,會出現下列訊息,禁止 Portainer Stack 批次管理:
This stack was created outside of Portainer. Control over this stack is limited