---
disqus: ahb0222
GA : G-VF9ZT413CG
---
> [color=#40f1ef][name=LHB阿好伯, 2025/12/25][:earth_africa:](https://www.facebook.com/LHB0222/)
[TOC]
## 🎯 前言:Docker 容器越來越多,管理好頭痛?
如果你跟我一樣,照著前面的教學在 VPS 上陸續部署了 **Termix**、**IT-Tools**、**P2P 文件快傳**...你可能已經遇到這些困擾:
- 🤯 **指令太多記不住**:每個服務的啟動、停止、查看日誌指令都不同
- 📊 **想知道資源使用**:哪個容器吃了最多 CPU 和記憶體?
- 🔄 **更新好麻煩**:每次更新都要敲一堆指令
- 👥 **團隊協作困難**:同事不會下指令怎麼辦?
這時候你需要的就是 **Portainer**!
### Portainer 是什麼?
**Portainer** 是一個**開源、免費的 Docker 圖形化管理平台**,可以說是 Docker 的「控制中心」。
**主要特色:**
- 🖥️ **網頁版管理介面**:不用記指令,點點滑鼠就搞定
- 📊 **即時監控儀表板**:一眼看清所有容器狀態和資源使用
- 🚀 **一鍵部署應用**:內建 App Templates,點一下就能安裝常用服務
- 📝 **容器日誌查看**:不用下指令,網頁直接看 log
- 👥 **多人協作管理**:可以設定不同權限給團隊成員
- 🔄 **簡化更新流程**:點個按鈕就能更新容器
:::success
:bulb: **重點提示**
安裝 Portainer 後,你之前部署的所有 Docker 服務(Termix、IT-Tools...)都能在同一個介面管理!
:::

---
## 🔧 環境需求與準備
### 系統需求
| 項目 | 需求 |
|------|------|
| **作業系統** | Ubuntu 20.04 / 22.04 / 24.04 LTS |
| **Docker 版本** | 20.10+ |
| **記憶體** | 最少 512MB,建議 1GB+ |
| **磁碟空間** | 最少 2GB |
| **端口** | 需開放 9443 端口(HTTPS)或 9000(HTTP) |

[推薦 RackNerd VPS](https://my.racknerd.com/aff.php?aff=16718) 有固定 IP 可以使用
### 確認 Docker 已安裝
```bash
docker --version
```
如果還沒有安裝 Docker,請參考之前的文章或執行以下指令:
```bash
# 一鍵安裝 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 驗證安裝
docker --version
```
---
## 🚀 快速安裝 Portainer
### 步驟 1:建立 Portainer 資料卷
Portainer 需要一個地方儲存設定資料,我們先建立一個 Docker Volume:
```bash
docker volume create portainer_data
```
:::info
:memo: **什麼是 Volume?**
就像是給容器準備一個「保險箱」,即使容器刪除重建,裡面的設定和資料也不會遺失。
:::
### 步驟 2:運行 Portainer 容器
接下來這行指令會下載並啟動 Portainer:
```bash
docker run -d \
-p 8001:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
```
**參數詳解:**
| 參數 | 說明 |
|------|------|
| **-d** | 背景執行 |
| **-p 9443:9443** | HTTPS 網頁管理端口 |
| **-p 8000:8000** | Agent 通訊端口(管理遠端 Docker) |
| **--restart=always** | 開機自動啟動 |
| **-v /var/run/docker.sock** | 連接到 Docker(核心!) |
| **-v portainer_data:/data** | 資料持久化 |
### 步驟 3:驗證安裝
```bash
# 查看容器狀態
docker ps | grep portainer
```
看到類似以下輸出就代表成功了:
```
1d660d80242f portainer/portainer-ce:latest Up 2 minutes 0.0.0.0:9443->9443/tcp portainer
```
### 步驟 4:開放防火牆端口
```bash
# 允許 9443 端口
sudo ufw allow 9443/tcp
# 允許 8000 端口(可選,管理遠端主機才需要)
sudo ufw allow 8000/tcp
# 檢查狀態
sudo ufw status
```
---
## 🎨 首次設定教學
### 步驟 1:訪問 Portainer 網頁介面
在瀏覽器中輸入(==注意是 https==):
```
https://你的VPS_IP:9443
```
例如:`https://172.245.26.54:9443`
:::warning
:warning: **安全警告**
第一次訪問會看到「您的連線不是私人連線」警告,這是正常的(因為使用自簽SSL證書)。
- Chrome:點擊「進階」→「繼續前往」
- Firefox:點擊「進階」→「接受風險並繼續」
:::

### 步驟 2:建立管理員帳號
第一次訪問會要求建立管理員帳號:
| 欄位 | 說明 | 範例 |
|------|------|------|
| **Username** | 管理員帳號 | `admin` |
| **Password** | 密碼(至少 12 字元) | `MySecurePass123!` |
點擊 **「Create user」** 完成建立。
:::danger
:warning: **重要!時間限制**
首次訪問後,你只有 **5 分鐘**時間完成設定!
超過時間會被鎖定,需要重啟容器:`docker restart portainer`
:::
### 步驟 3:選擇環境
建立帳號後,選擇 **「Get Started」** 或 **「Docker」**
Portainer 會自動連接到本地的 Docker 環境。
完成!進入 Portainer 主控台 🎉
---
## 📊 Portainer 主要功能介紹
### 1. Dashboard(儀表板)
進入後第一眼看到的就是儀表板,一眼掌握所有資訊:

**顯示資訊:**
- ✅ 運行中的容器數量
- 📦 映像檔數量
- 🌐 網路數量
- 💾 Volume 數量
- 📊 資源使用概況
### 2. Containers(容器管理)
這是最常用的功能,可以管理所有容器:

**可以做什麼?**
- 🟢 **啟動/停止容器**:點一下就搞定
- 🔄 **重啟容器**:不用下指令
- 📝 **查看日誌**:即時顯示 log
- 📊 **監控資源**:CPU、記憶體使用率
- 🔍 **進入容器終端**:網頁版的 `docker exec`
- 🗑️ **刪除容器**:輕鬆清理
**實戰範例:查看 Termix 容器日誌**
1. 在容器列表找到你之前部署的 `termix` 容器
2. 點擊容器名稱進入詳情頁
3. 點擊 **「Logs」** 標籤
4. 即時查看運行日誌,不用再下 `docker logs` 指令!


### 3. Images(映像檔管理)
管理你下載的所有 Docker 映像檔:

**可以做什麼?**
- 📥 **拉取新映像**:輸入映像名稱直接下載
- 🏷️ **查看映像標籤**:版本管理
- 🗑️ **刪除無用映像**:釋放磁碟空間
- 📊 **查看映像大小**:檢查佔用空間
### 4. Stacks(堆疊管理)
這是 Portainer 的強大功能,用來管理 Docker Compose 專案:

**什麼是 Stack?**
就是用 Docker Compose 部署的一組容器。
**實戰範例:部署 IT-Tools**
還記得之前用 `docker-compose.yml` 部署 IT-Tools 嗎?
在 Portainer 中可以更簡單:
1. 點擊左側 **「Stacks」**
2. 點擊 **「+ Add stack」**
3. 輸入名稱:`it-tools`
4. 在 **Web editor** 貼上 docker-compose 內容:

```yaml
version: '3.9'
services:
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
ports:
- "8888:80"
```
5. 點擊 **「Deploy the stack」**
完成!不用下任何指令,IT-Tools 就部署好了!
### 5. Networks(網路管理)
管理 Docker 網路,讓容器之間互相通訊:

**常見應用:**
- 🔗 讓不同容器在同一個網路
- 🔒 隔離敏感服務
- 🌐 建立自訂橋接網路
### 6. Volumes(儲存卷管理)
管理所有 Docker Volume,查看資料使用情況:

**可以做什麼?**
- 📦 建立新 Volume
- 🔍 查看 Volume 詳情
- 🗑️ 刪除無用 Volume
- 💾 備份重要資料
---
## 🎯 實戰場景:統一管理所有服務
假設你按照前面的教學部署了以下服務:
1. ✅ Termix(SSH 管理平台)
2. ✅ IT-Tools(開發工具箱)
3. ✅ P2P 文件快傳
現在用 Portainer 統一管理它們!
### 場景一:一鍵更新所有服務
**傳統方式(麻煩):**
```bash
# 更新 Termix
cd /opt/termix
docker compose pull
docker compose up -d --force-recreate
# 更新 IT-Tools
cd ~/docker/it-tools
docker compose pull
docker compose up -d --force-recreate
# 更新 P2P
docker pull matrixseven/file-transfer-go:latest
docker stop file-transfer-p2p
docker rm file-transfer-p2p
docker run -d ...(一長串指令)
```
**Portainer 方式(簡單):**
1. 進入 **Containers** 頁面
2. 勾選要更新的容器
3. 點擊 **「Recreate」**
4. 勾選 **「Pull latest image」**
5. 點擊 **「Recreate」** 確認
### 場景二:快速查看資源使用
想知道哪個服務吃最多資源?
1. 進入 **Containers** 頁面
2. 點擊任一容器名稱
3. 查看 **「Stats」** 標籤
你會看到:
- 📊 **CPU 使用率**:即時圖表
- 💾 **記憶體使用**:當前/上限
- 🌐 **網路流量**:上傳/下載
- 💿 **磁碟 I/O**:讀寫速度

---
## 🔧 進階功能
### 1. 容器終端(Web Console)
不用 SSH 進伺服器,直接在網頁操作容器終端:
1. 進入容器詳情頁
2. 點擊 **「Console」** 標籤
3. 選擇 **「/bin/bash」** 或 **「/bin/sh」**
4. 點擊 **「Connect」**
就像執行 `docker exec -it [容器] bash` 一樣!


### 2. 容器重新配置
想修改容器的端口或環境變數?不用刪除重建:
1. 進入容器詳情頁
2. 點擊 **「Duplicate/Edit」**
3. 修改設定(端口、Volume、環境變數等)
4. 點擊 **「Deploy the container」**
Portainer 會幫你刪除舊容器並建立新的!
### 3. 自動更新容器(Watchtower 整合)
想讓容器自動更新到最新版?可以搭配 Watchtower:
在 Portainer 中部署 Watchtower Stack:
```yaml
version: "3"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=86400
```
Watchtower 會每天檢查一次,自動更新所有容器!
## ⚙️ 常見問題排除
### 問題 1:無法訪問 9443 端口
**檢查清單:**
```bash
# 1. 確認容器運行
docker ps | grep portainer
# 2. 檢查防火牆
sudo ufw status
# 3. 開放端口
sudo ufw allow 9443/tcp
# 4. 測試本地連線
curl -k https://localhost:9443
```
### 問題 2:初始化超時被鎖定
**錯誤訊息:** "Your Portainer instance timed out for security purposes"
**解決方法:**
```bash
# 重啟 Portainer 容器
docker restart portainer
# 立即訪問網頁完成設定(5分鐘內)
```
### 問題 3:想更改端口
**需求:** 9443 端口被佔用,想改成其他端口
**解決方法:**
```bash
# 停止並刪除容器
docker stop portainer
docker rm portainer
# 重新運行,改用 18443 端口
docker run -d \
-p 8000:8000 \
-p 18443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# 記得更新防火牆
sudo ufw allow 18443/tcp
```
### 問題 4:忘記管理員密碼
**解決方法:**
```bash
# 停止容器
docker stop portainer
# 刪除資料庫(會清除所有設定!)
docker volume rm portainer_data
# 重新建立並啟動
docker volume create portainer_data
docker start portainer
# 重新註冊管理員帳號
```
:::danger
:warning: **警告**
刪除 Volume 會清除**所有設定**,包括已添加的主機、用戶、Stack 等!請謹慎操作。
:::
### 問題 5:容器列表是空的
**可能原因:** Docker Socket 沒有正確掛載
**檢查方法:**
```bash
# 查看容器掛載
docker inspect portainer | grep docker.sock
# 應該看到類似輸出:
# "/var/run/docker.sock:/var/run/docker.sock"
```
**解決方法:**
確認運行 Portainer 時有加上 `-v /var/run/docker.sock:/var/run/docker.sock`
---
## 📚 管理指令速查
### Docker 指令
```bash
# 查看 Portainer 狀態
docker ps | grep portainer
# 查看日誌
docker logs portainer
# 查看即時日誌
docker logs -f portainer
# 重啟 Portainer
docker restart portainer
# 停止 Portainer
docker stop portainer
# 啟動 Portainer
docker start portainer
# 更新 Portainer
docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce:latest
# 然後重新執行 docker run 指令
```
### 資料備份
```bash
# 備份 Portainer 資料
docker run --rm \
-v portainer_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/portainer-backup-$(date +%Y%m%d).tar.gz /data
# 還原資料
docker run --rm \
-v portainer_data:/data \
-v $(pwd):/backup \
alpine sh -c "cd /data && tar xzf /backup/portainer-backup-20241225.tar.gz --strip 1"
```
---
## 🎓 最佳實踐建議
### 1. 定期備份設定
建議每週備份一次 Portainer 資料:
```bash
# 建立備份腳本
cat > ~/backup-portainer.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=~/portainer-backups
mkdir -p $BACKUP_DIR
docker run --rm \
-v portainer_data:/data \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/portainer-$(date +%Y%m%d).tar.gz /data
# 只保留最近 7 天的備份
find $BACKUP_DIR -name "portainer-*.tar.gz" -mtime +7 -delete
EOF
chmod +x ~/backup-portainer.sh
# 設定每週日自動備份
(crontab -l 2>/dev/null; echo "0 2 * * 0 ~/backup-portainer.sh") | crontab -
```
### 2. 使用 HTTPS(建議)
雖然預設使用自簽證書,但已經有 HTTPS 加密了。
如果你有網域名稱,可以配合 Nginx 反向代理 + Let's Encrypt 獲得正式的 SSL 證書。
### 3. 限制訪問 IP
如果只想讓特定 IP 訪問 Portainer:
```bash
# 刪除原本的規則
sudo ufw delete allow 9443/tcp
# 只允許特定 IP
sudo ufw allow from 你的IP位址 to any port 9443
# 例如:只允許公司網路訪問
sudo ufw allow from 203.0.113.0/24 to any port 9443
```
### 4. 建立唯讀帳號
如果要給同事看容器狀態,但不想讓他們修改:
1. 在 Portainer 中點擊 **「Users」**
2. 點擊 **「Add user」**
3. 建立新帳號,Role 選擇 **「Helpdesk」**
這樣他們只能查看,無法修改設定!
---
## 🔄 與前面教學的整合
現在我們已經用 Docker 部署了多個服務,用 Portainer 統一管理:
### 已部署的服務總覽
| 服務 | 功能 | 端口 | 教學文章 |
|------|------|------|---------|
| **Termix** | SSH 管理平台 | 8080 | [連結](https://hackmd.io/@LHB-0222/termix-install) |
| **IT-Tools** | 開發工具箱 | 8888 | [連結](https://hackmd.io/@LHB-0222/it-tools) |
| **P2P 文件快傳** | 檔案傳輸 | 8082 | [連結](https://hackmd.io/@LHB-0222/p2p-transfer) |
| **Portainer** | 容器管理 | 9443 | 本文 |
### 工作流程建議
```mermaid
graph TD
A[想部署新服務] --> B[先查 Portainer App Templates]
B --> C{有現成模板?}
C -->|有| D[直接用 Template 部署]
C -->|沒有| E[寫 docker-compose.yml]
E --> F[在 Portainer 建立 Stack]
F --> G[部署完成]
D --> G
G --> H[用 Portainer 監控管理]
```
---
## 🎯 總結
恭喜你掌握了 **Portainer** 這個強大的 Docker 管理工具!
### 你現在可以做到:
✅ 用網頁管理所有 Docker 容器
✅ 不用記指令也能啟動/停止/更新服務
✅ 即時監控資源使用狀況
✅ 一鍵部署常用服務
✅ 手機也能隨時管理
### 我的使用心得
使用 Portainer,我已經很少直接下 Docker 指令了。
所有伺服器的容器狀態一目了然,真的超方便!
🌟 全文可以至下方連結觀看或是補充
全文分享至
https://www.facebook.com/LHB0222/
https://www.instagram.com/ahb0222/
有疑問想討論的都歡迎於下方留言
喜歡的幫我分享給所有的朋友 \o/
有所錯誤歡迎指教
# [:page_with_curl: 全部文章列表](https://hackmd.io/@LHB-0222/AllWritings)
