--- 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...)都能在同一個介面管理! ::: ![image](https://hackmd.io/_uploads/ByqPNn57be.png) --- ## 🔧 環境需求與準備 ### 系統需求 | 項目 | 需求 | |------|------| | **作業系統** | Ubuntu 20.04 / 22.04 / 24.04 LTS | | **Docker 版本** | 20.10+ | | **記憶體** | 最少 512MB,建議 1GB+ | | **磁碟空間** | 最少 2GB | | **端口** | 需開放 9443 端口(HTTPS)或 9000(HTTP) | ![image](https://hackmd.io/_uploads/ByNaiLLXZl.png) [推薦 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:點擊「進階」→「接受風險並繼續」 ::: ![image](https://hackmd.io/_uploads/S1dcE2qX-l.png) ### 步驟 2:建立管理員帳號 第一次訪問會要求建立管理員帳號: | 欄位 | 說明 | 範例 | |------|------|------| | **Username** | 管理員帳號 | `admin` | | **Password** | 密碼(至少 12 字元) | `MySecurePass123!` | 點擊 **「Create user」** 完成建立。 :::danger :warning: **重要!時間限制** 首次訪問後,你只有 **5 分鐘**時間完成設定! 超過時間會被鎖定,需要重啟容器:`docker restart portainer` ::: ### 步驟 3:選擇環境 建立帳號後,選擇 **「Get Started」** 或 **「Docker」** Portainer 會自動連接到本地的 Docker 環境。 完成!進入 Portainer 主控台 🎉 --- ## 📊 Portainer 主要功能介紹 ### 1. Dashboard(儀表板) 進入後第一眼看到的就是儀表板,一眼掌握所有資訊: ![image](https://hackmd.io/_uploads/r1rern57-g.png) **顯示資訊:** - ✅ 運行中的容器數量 - 📦 映像檔數量 - 🌐 網路數量 - 💾 Volume 數量 - 📊 資源使用概況 ### 2. Containers(容器管理) 這是最常用的功能,可以管理所有容器: ![image](https://hackmd.io/_uploads/rJVzBhqmbg.png) **可以做什麼?** - 🟢 **啟動/停止容器**:點一下就搞定 - 🔄 **重啟容器**:不用下指令 - 📝 **查看日誌**:即時顯示 log - 📊 **監控資源**:CPU、記憶體使用率 - 🔍 **進入容器終端**:網頁版的 `docker exec` - 🗑️ **刪除容器**:輕鬆清理 **實戰範例:查看 Termix 容器日誌** 1. 在容器列表找到你之前部署的 `termix` 容器 2. 點擊容器名稱進入詳情頁 3. 點擊 **「Logs」** 標籤 4. 即時查看運行日誌,不用再下 `docker logs` 指令! ![image](https://hackmd.io/_uploads/ryuNH29mWx.png) ![image](https://hackmd.io/_uploads/SyhXSn9mWl.png) ### 3. Images(映像檔管理) 管理你下載的所有 Docker 映像檔: ![image](https://hackmd.io/_uploads/ryd_Sh9X-e.png) **可以做什麼?** - 📥 **拉取新映像**:輸入映像名稱直接下載 - 🏷️ **查看映像標籤**:版本管理 - 🗑️ **刪除無用映像**:釋放磁碟空間 - 📊 **查看映像大小**:檢查佔用空間 ### 4. Stacks(堆疊管理) 這是 Portainer 的強大功能,用來管理 Docker Compose 專案: ![image](https://hackmd.io/_uploads/rJB9Bh5QZx.png) **什麼是 Stack?** 就是用 Docker Compose 部署的一組容器。 **實戰範例:部署 IT-Tools** 還記得之前用 `docker-compose.yml` 部署 IT-Tools 嗎? 在 Portainer 中可以更簡單: 1. 點擊左側 **「Stacks」** 2. 點擊 **「+ Add stack」** 3. 輸入名稱:`it-tools` 4. 在 **Web editor** 貼上 docker-compose 內容: ![image](https://hackmd.io/_uploads/SyXkIh9mZx.png) ```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 網路,讓容器之間互相通訊: ![image](https://hackmd.io/_uploads/r1emL3q7-x.png) **常見應用:** - 🔗 讓不同容器在同一個網路 - 🔒 隔離敏感服務 - 🌐 建立自訂橋接網路 ### 6. Volumes(儲存卷管理) 管理所有 Docker Volume,查看資料使用情況: ![image](https://hackmd.io/_uploads/HJHE82cX-l.png) **可以做什麼?** - 📦 建立新 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**:讀寫速度 ![image](https://hackmd.io/_uploads/Bknywh9QZx.png) --- ## 🔧 進階功能 ### 1. 容器終端(Web Console) 不用 SSH 進伺服器,直接在網頁操作容器終端: 1. 進入容器詳情頁 2. 點擊 **「Console」** 標籤 3. 選擇 **「/bin/bash」** 或 **「/bin/sh」** 4. 點擊 **「Connect」** 就像執行 `docker exec -it [容器] bash` 一樣! ![image](https://hackmd.io/_uploads/S1GwYn5QWg.png) ![image](https://hackmd.io/_uploads/Sk-dYnqmZg.png) ### 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) ![](https://i.imgur.com/nHEcVmm.jpg)