用 Stack 部署
Stacks 是 Portainer 裡最值得先學會的功能。一份 Docker Compose YAML 進去,Portainer 幫你部署成一組容器,之後改 YAML 再按部署即可。官方說明:Add a new stack。
四種建立方式
| 方式 | 適用 |
|---|---|
| Web editor | 直接在瀏覽器貼 YAML,家用與教學最方便 |
| Upload | 手上已有 compose.yml 檔 |
| Git repository | YAML 已放在 Git;可搭配自動更新,見 GitOps |
| Custom template | 團隊反覆部署同一類應用 |
名稱請用小寫與連字號,例如 whoami。這會成為 Stack 識別,之後不好改。
最小範例
側欄選 Stacks → Add stack → Web editor,貼上:
按 Deploy the stack。成功後,瀏覽器開 http://主機IP:8080 應看得到回應。回到 Containers,會出現這個 Stack 底下的容器。
這份 YAML 與你在終端機跑 docker compose up -d 的內容相同。Portainer 沒有另創一套格式。
環境變數
資料庫密碼、網域這類「每台機器不同」的值,不要寫死在 YAML。在 Stack 頁填環境變數,Compose 裡用 ${變數名} 引用:
變數改了、YAML 沒改時,仍可重新部署。Swarm 環境不支援 Compose 的 env_file 合併方式,要逐項定義;Standalone 可用 Portainer 提供的 stack.env 寫法,細節見官方文件。
Bind mount 路徑
在 Portainer 的 Web editor 部署時,Compose 裡的相對路徑(例如 ./config:/config)不是相對於你心中的專案資料夾,而是相對於 Portainer 寫出該檔案的位置(多半在它自己的資料 Volume 裡)。結果常是「以為掛到家目錄,其實掛到別處」。
Community Edition 上請用:
- named volume(
postgres_data:/var/lib/postgresql/data),或 - 主機絕對路徑(
/opt/myapp/config:/config)。
相對路徑從 Git 展開、並指定本機目錄,是 Business Edition 的功能。
改設定與刪除
編輯 Stack 的 YAML 後再次 Deploy,等同更新這組服務。刪除 Stack 時,畫面上會問是否一併刪容器與相關網路。Volume 預設常會留下,這是為了避免誤刪資料庫;確定不要了再手動刪 Volumes。
已經在 CLI 用 Compose 跑起來的專案,硬用 Portainer 再部署同一份檔,可能名稱或網路衝突。要嘛整組改由 Portainer 管,要嘛繼續用 CLI,不要兩邊同時對同一組容器下指令。
相關資料
- 映像、Volume 與網路
- 從 Git 部署
- 畫面逐步示範見社群影音