首頁

目前文章總數:197 篇

  

最後更新:2025年 09月 13日

0010. Portainer 教學、進階應用介紹:適合初學者的圖形化 Docker 管理工具

日期:2025年 09月 13日

標籤: Docker Container Portainer Ubuntu Linux

摘要:Docker


應用所需:1. 已安裝 Portainer
解決問題:Portainer 管理上的應用 & 定位 & 快速用法
相關參考:0002. Ubuntu 上使用 Docker 管理工具 Portainer
基本介紹:本篇分為 5 部分。
第一部分:Portainer 前言 - 適用對象 & 本篇摘要
第二部分:使用者與群組權限設定
第三部分:連接多台機器的環境管理
第四部分:應用模板 (App Templates)
第五部分:Stack 管理






第一部分:Portainer 前言 - 適用對象 & 本篇摘要

Step 1:本篇前言、目標

對許多剛接觸 Docker 的開發團隊來說,CLI 指令操作門檻高、錯誤難以排查,是導入容器化的第一道障礙。
Portainer 作為一款輕量級的 Docker 可視化管理工具,提供直覺的網頁介面,讓用戶能夠輕鬆部署應用、管理權限、監控節點狀態,甚至跨主機操作容器。
而在免費的 CE 版本中,也包含了許多足以應對中小型開發需求的實用功能。



Step 2:本篇目標

本篇文章旨在介紹 Portainer CE (Community Edition) 的幾個核心功能,包含以下功能:

項目 說明
1. 連接多台機器的環境管理 示範如何將多台 Docker 主機(本地或遠端)加入 Portainer 的環境中集中管理,適合有多節點需求的小型開發或測試團隊使用。
2. 使用者與群組權限設定 介紹 Portainer CE 中的使用者與群組管理機制,並說明在 CE 版本下如何進行基本的角色分工與存取控制,CE 主要用於訪問多台機器的檢視。
3. 應用模板 (App Templates) 解說如何使用 Portainer 提供的預設應用模板快速部署常用應用,以及自訂模板的建立方式,加速開發測試環境的搭建流程。
4. Stack 管理 說明如何透過 Portainer 建立、部署與管理 Docker Stack,包括 YAML 編排、環境變數設置與服務版本控制,讓多容器應用可以更有條理地管理。


最終目標:讓讀者了解如何使用 Portainer 提升容器部署與管理的效率,並協助團隊在不熟悉指令操作的情況下,快速上手 Docker 生態系

Step 3:適用群體、對象

本篇主要適用的對象如下,適合團隊剛開始導入 Docker 容器管理工具時參考。

1. Docker 有基本認識,但不熟悉 CLI 操作的開發者
2. 希望建立簡單容器化管理介面的小型或中型團隊
3. 正在尋找免費工具管理多台 Docker 主機環境的 IT 或 DevOps 工程師
4. 正在評估 Portainer 是否能作為內部部署工具的技術決策者



Step 4:補充 - Portainer 與建議管理

以下是團隊與規模的初步評估,若開發團隊中有不熟悉容器化管理成員,可以採用 Portainer 讓成員快速熟悉。
待整體熟系容器化生態系後,可以逐步減少 Portainer 的依賴。

團隊屬性 建議管理方式
新創 / 團隊小 / 成員不熟 Docker ✅ Portainer Template + Webhook
中大型團隊 / DevOps 團隊健全 ✅ Jenkins + GitOps / SSH 部署
混合團隊(部分人 DevOps,部分人偏開發) ✅ Portainer + Jenkins 整合(用 Jenkins 下達 Webhook 給 Portainer)





第二部分:連接多台機器的環境管理

Step 1:多環境管理機器架構 & 本節目標

我們目前已在 192.168.51.93 安裝了 Portainer,但若有多台機器要管理話,就需要對其他機器做設定
如下圖,我們還有一台機器 192.168.51.94 當前已安裝了 Docker
本節目標: 192.168.51.93 可以監控 192.168.51.94 機器,可以不用登入 192.168.51.94 就能觀察到該機器的 Docker Container 狀態
※並且可以有視覺化的方式監控,對剛熟悉者較友善


Step 2:設定 Enviroments

登入 Portainer -> 選擇左下角的 Settings 中的 Enviroemnt -> 選擇右上角的 Add enviroment
目前管理只有看到自己的 local


Step 3:選擇 Docker Standalone

進入後,選擇 Docker Standalone -> 選擇按鈕 Start Wizard
目的是可以訪問另一台已安裝 Docker 的機器


Step 4:設定 Agent - 複製語法

選擇 Agent -> 點擊 Copy Command
此語法是用來安裝另一台被監控機器設定為 Agent ,使得本機的 Portainer 可以訪問被監控機器


Step 5:設定 Agent - 登入被監控的機器,執行語法

將從 Portainer 複製的語法(監控機器),貼上到另一台 被監控的機器 -> 執行 Shell 腳本 -> 安裝完成
補充:若被監控的機器 Port:9001 已經被占用,需要調整 Port 號


Step 6:設定 Agent - 貼上資訊

回到 Portainer (監控機器),將被監控的機器資訊貼上,以當前的範例來看會是:

Name http://192.168.51.94:9001
Enviroment address 192.168.51.94:9001


填完資訊 -> 點擊 Connect


添加完成:


Step 7:連接多台機器的環境管理 - 嘗試訪問

最後回到 Enviroment 頁面,就會出現被監控機器的資訊,我們點擊進入 http://192.168.51.94:9001


Step 8:連接多台機器的環境管理 - 完成

進入後可以訪問到遠端的被監控機器,為了方便驗證,從 192.168.51.94 也安裝 Portainer 進行比對,容器資訊會是一致
未來只要一台機器安裝 Portainer 就可以監控多台遠端安裝 Docker 的機器


2. 使用者與群組權限設定 介紹 Portainer CE 中的使用者與群組管理機制,並說明在 CE 版本下如何進行基本的角色分工與存取控制,CE 主要用於訪問多台機器的檢視。



第三部分:使用者與群組權限設定


Step 1:Portainer CE 限制 & 本節目標

如果使用 Portainer Community Edition(社群免費版本),在帳戶與權限設定中有以下限制:
簡言之,CE 版本無法到細部的權限、管理設定
本節目標:設定使用者權限,並達到開放可監控指定單一機器 (這裡用 192.168.51.94 可訪問 ; 但 192.168.51.93 不可訪問)

功能 是否可用於 Portainer CE
建立多個使用者帳號
指定團隊只能存取某一主機
控制誰可以部署 Stack 🚫
限制使用者只能查看容器 🚫
自訂操作權限(如不允許刪除) 🚫



Step 2:建立 User

左邊 Menu 選擇 Users -> Add User 資訊填入 -> Create User -> 建立完成


Step 3:建立 Team

左邊 Menu 選擇 Teams -> Add a new team 資訊填入 -> Create team -> 建立完成


Step 4:設定 User 所屬 Team - 進入 Team 內容

左邊 Menu 選擇 Teams -> 拉到畫面最下方 -> 選擇剛剛建立好的 Team -> 進入


Step 5:設定 User 所屬 Team - 添加 User

進入後 -> 左下方將需要添加到此 Team 的 User -> 選擇 +Add


並且添加後會轉移到 Team Members


Step 6:設定帳號訪問機器權限 - 進入管理

左邊選擇 Enviroment -> 出現當前所有的機器清單 -> 選擇 192.168.51.94:9001 這台機器(被監控機器) -> 選擇 Manage Access


Step 7:設定帳號訪問機器權限 - 設定帳號或群組

進入管理介面,可以選擇以群組為單位的 組名稱 ; 或者以單一用戶為單位的 用戶名,這邊可進行添加
※添加後該用戶才會有訪問該機器的權限


添加後如下畫面:


Step 8:使用者與群組權限設定 - 目標完成

我們以剛剛新建的帳號進行登入 192.168.51.93 (監控機器)
可以看到只能訪問 192.168.51.94:9001 被監控機器,與 Step 6. 設定相呼應




第四部分:應用模板 (App Templates)

Step 1:快速部署預設的容器 & 本節目標

為了使用者友善, Portainer 提供常用的預設模板,讓使用者可以很輕鬆的建立容器,不用下任何指令
本節目標: 可以快速運行 Mysql 容器 (還有很多,以 Mysql 資料庫舉例),以及建立自訂模板

Step 2:增加應用模板

進入一台機器後(這裡登入監控機,local) -> 左邊選擇 App Templates -> 選擇 Mysql



Step 3:增加應用模板 - Deploy

填入此容器的名稱 -> 選擇 Deploy -> Mysql 資料庫的容器就建立完成了


補充:若想要避免 Port 衝突可以調整宿主機與容器的對應 Port 號


Step 4:增加應用模板 - 完成

回到容器檢視,可以發現我們已快速的安裝 Mysql,但問題是預設 App Templates 不能選擇要安裝的版本
這時就需要用到 Customer App Templates


Step 5:增加客製化應用模板 - 目標安裝 Mysql 8

如果想要安裝特定版本的 Mysql 以及設定一些參數,這就需要用到 Custom Templates,會開始用到 .yml 腳本
因此此功能會是熟悉的開發者建立,讓剛接觸的使用者使用
左邊選擇 App Templates -> Custom Templates -> 並且選擇 Create Custom template



Step 6:增加客製化應用模板 - Deploy

進入後在 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




Step 6:增加客製化應用模板 - Create Template

進入後在 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




Step 7:增加客製化應用模板 - 進入 Template

如果語法都正確,再次回到 Customer App Templates 會看到剛剛建立的模板,點擊進入


Step 8:增加客製化應用模板 - Deploy

進入後可以直接點擊 Deploy the Stack


Step 9:增加客製化應用模板 - Stack

我們從 Customer App Templates 建立的容器,會在 Stack 頁籤中統一管理,點擊檢查


Step 10:增加客製化應用模板 - 完成

可以看到現在是我們客製化的 Mysql 8.0 容器,並且未來想要對容器重建,可以不需要任何指令,只需要從 GUI 介面中就可以建立。




第五部分:Stack 管理

Step 1:說明 Stack & 本節目標

以下是 Tempalte 與 Stack 生命週期的關係:

Customer Templates → 選擇範本 → 設定參數 → 部署為 Stack → 實際運行


並且以下是 2 者的特性比較:

項目 Stack Customer Templates
性質 實際運行的應用程式實例 可重複使用的部署範本
用途 部署和管理容器化應用 建立標準化的部署模板
狀態 動態(運行中/停止) 靜態(定義檔案)


由此可知,Stack 的建立會經由 App Templates 產生
本節目標: Stack 的批次管理容器使用方式、以及批次更新語法並且重建容器

Step 2:Stack 管理 - 選擇項目

進入一台機器後(這裡登入監控機,local) -> 左邊選擇 Stack -> 選擇在 第四部份 建立的 mysql8


Step 3:Stack 管理 - 可執行功能

進入後,會有該 Stack 底下的所有容器,並且上方有 3 個按鈕:

項目 說明
Stop this Stack 當這個 Stack 啟動時,會顯示此按鈕,執行後會將該 Stack 底下所有的容器一併停止
  當這個 Stack 停止時,會顯示 Start this Stack
Delete this Stack 刪除該 Stack 底下的所有 Container 容器


Portainer 中的 Stack 可以批次管理相關聯的 Container


Step 4:Stack 批次更新 - 進入 Editor

上方的 Editor -> 選擇進入


Step 5:Stack 批次更新 - 可立即撰寫 & 更新

我們可以觀察到左邊是在 第四部份 建立的 Customer Templates 語法
為了Demo 將 Port 號改為 3800 ; Mysql Image 版本改為 8.1


調整完畢後,拉到下方的 Actions -> 點擊 Update the stack 按鈕


確認更新 -> 接著會立即重新部署新版本的語法


Step 6:Stack 批次更新 - 重新部署完成

最後回到 Stack 觀察,可以發現該 Stack 下的 Container 容器已經重新部署
對於剛接觸熟系容器,完全不需要執行任何 Shell/Batch 的 docker 指令,即可輕鬆重新部署容器


Step 7:補充 : 必須在 Portainer 中建立 Stack 才能管理

Portainer 是一套 Docker 管理介面,它只管理透過它自己部署或註冊進來的資源。
若我們從 Ubuntu 中,執行 docker-compose.yml 腳本,雖然 Portainer 也會感應到 Stack
但因為沒有透過 Portainer 註冊/部署 因此部會列為控管

如下圖,會出現下列訊息,禁止 Portainer Stack 批次管理:

This stack was created outside of Portainer. Control over this stack is limited