簡介

Portainer 是一個 GUI Docker 管理工具,為 Docker 提供一個簡易但功能強大的管理,除了 Docker 以外也支援 Kubernete、Nomad,並且提供遠端管理,可以在一個地方管理多個 Docker 環境。

Powerful container management software for Platform Teams, DevOps, Dev
安裝
<aside> 💡 以下皆以免費的 Community 版本為例
</aside>
<aside> 💡 使用前必須安裝 Docker Engine (Windows 為 Docker Desktop)
Docker Engine installation overview
</aside>
- 建立資料 Volume
docker volume create portainer_data
- 執行 Portainer
docker run -d -p 8000: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
<aside> 💡 這邊我只開 Port 9443
,Port 8000
是 Edge Agent 用的,所以如果確定不會用到可以將 -p 8000:8000
移除
</aside>
- 註冊帳號
前往 **https://**localhost:9443/
<aside> ⚠️ Portainer 預設走 https 網址列必須打 https
才能連上
</aside>
瀏覽器會警告連線不安全,但是內網要 ssl 憑證的話很麻煩,這邊我們直接按繼續前往即可

接著系統會要你建立帳號,密碼必須 12 個字以上

建立完成後,選擇 Get Started 建立本機環境即可開始使用

<aside> 💡 如果連上去後出現以下畫面

代表你開他之後太久沒理他了,因為安全因素鎖起來,請重開 portainer 再進行初始設定
docker restart portainer
</aside>
使用
基本操作
登入之後映入眼簾的應該是這個首頁,目前只有一個本地環境,可以透過後面的介紹新增遠端環境

選擇一個環境後,出現的是儀表板,會列出目前 Docker 的狀態和基本資訊

Containers 為目前開啟的容器,連動到環境上 Docker 的容器,可以對容器進行常見的 Docker 操作

點進去可以查看更詳細的容器資訊,包括容器的 Log,也可以針對容器設定進行修改,也可以開啟終端

Images 則是 Docker 目前儲存的所有 Dockers Image,同樣可以進行常見的 Docker 操作,包括從遠端 Image 庫拉 Image 下來

Network 則是 Docker 使用的虛擬內網

Volumes 是 Docker 使用的儲存用 Volume,用來掛在 Container 上作為永久儲存

若要新增一個容器,可以在 Containers 頁按下 Add Container ,並填寫容器資料之後,按下 Deploy the container 即可


很簡單吧,其實你只要有 Docker 的基本概念,這個工具應該很好上手,接下來介紹一些方便的功能
App Template

Protainer 提供一系列 App 範本,可供您快速建立一個服務,例如我想要架一個 Mysql 資料庫:
- 點一下 MySQL
- 填上 Container 名稱和 Root 的密碼
- 按下 Deploy the container
好了,你成功架了一個 Mysql server 了

不過因為剛剛沒有額外設定,他預設會隨機挑一個 Port 來開,理論上你應該可以直接用 Mysql 的 Client 來連線到這個伺服器

<aside> 💡 如果要在建立時設定轉出來的 Port,可以點開 Show advanced options 指定你要的 Port 甚至 Mysql 資料的儲存位置

</aside>
<aside> 💡 你應該會發現他預設開了 MySQL 5.7,因為 MySQL 8 在容器內可能會出現 Innodb 錯誤,雖然我測試下來在實體機器的 Docker 開 8 的話沒有出現太大的問題,如果你想要升級的話,可以參考以下步驟:
- 點開剛剛建立的 MySQL container
- 按下 Duplicate/Edit
- 將 Image 從
mysql/mysql-server:5.7
改成mysql/mysql-server:8.0
- 按下 Deploy the container,系統會問你是否取代
</aside>
Stacks
Stacks 其實就是一個 Docker compose 的集中地,在這邊寫上 Docker compose 的檔案內容後,即可透過 Portainer 管理
- 按下 Add stack
- 貼上 docker-compose.yml 的內容,以 wordpress 為例,或按下 Upload 選擇檔案 awesome-compose/compose.yaml at master · docker/awesome-compose
- 如果需要指定環境變數可以在這邊設定
- 按下 Deploy the stack,就會開始部屬
- 點進去後,可以看到這個 Stack 的資訊以及他的相關 Container 並加以管理
- 也可以嘗試連線看看是否有架設成功
遠端管理
Portainer 提供在一個站點集中管理多台 Docker 機器的功能,設定方式也非常簡單,選擇一種情境即可。
Agent
使用此方式,這個伺服器的 Port 9001 (預設)需要可以被 Portainer 碰到,設定方式如下:
- 在遠端伺服器輸入以下指令架設 Agent 伺服器
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest
- 在本機的 Portainer 上,進入 Environments 頁,並按下 Add Environment
- 按下 Docker Standalone
- 輸入遠端伺服器的名稱和位址填上遠端伺服器的 IP 和 Port 後,按下 Connect
- 出現新增成功後,回到首頁,就會看到遠端伺服器了
Edge Agent
如果遠端伺服器沒辦法隨便開 Port 出來,可以選擇 Edge Agent 反過來讓遠端伺服器主動把設定丟給 Portainer,此時 Portainer 就需要開 Port 8000
,設定方式如下:
- 如果在啟動 Portainer 時沒有開 Port
8000
,請重新啟動:- 停止原有的 container
docker stop portainer
- 移除原有的 container
docker rm portainer
- 以 Port
8000
和 Port9443
重新啟動 Portainerdocker run -d -p 8000: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
- 停止原有的 container
- 在本機的 Portainer 上,進入 Environments 頁,並按下 Add Environment
- 按下 Docker Standalone
- 進入這頁,這次選擇 Edge Agent,並填上本機的 Portainer 網址,不能是 localhost
- 按下 Create ,Portainer 會給你一個指令,將他複製到遠端伺服器上
- 看一下右上角,如果出現 heartbeat 代表有收到資料
- 回到首頁,就會看到遠端伺服器了
更新
更新主伺服器
<aside> 💡 更新時雖然不會丟設定,還是建議備份設定檔
- 進入 Settings
- 選擇最底下的 Download Backup 下載目前的設定檔
</aside>
- 停止原有的 container
docker stop portainer
- 移除原有的 container
docker rm portainer
- 下載最新 Image
docker pull portainer/portainer-ce:latest
- 啟動 Portainer
docker run -d -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
<aside> 💡 如果需要使用 Edge Agent ,請再加上-p 8000:8000
</aside>
Upgrading on Docker Standalone
更新 Agent
- 停止原有的 container
docker stop portainer_agent
- 移除原有的 container
docker rm portainer_agent
- 下載最新 Image
docker pull portainer/agent:latest
- 啟動 Portainer
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest
Upgrading on Docker Standalone
更新 Edge Agent
- 在本機的 Portainer 上,進入 Environments 頁,進入要更新的 Edge Agent 伺服器,會看到兩比 Key,等會會用到
- 停止原有的 container
docker stop portainer_edge_agent
- 移除原有的 container
docker rm portainer_edge_agent
- 下載最新 Image
docker pull portainer/agent:latest
- 啟動 Portainer
docker run -d \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -v /var/lib/docker/volumes:/var/lib/docker/volumes \\ -v /:/host \\ -v portainer_agent_data:/data \\ --restart always \\ -e EDGE=1 \\ -e EDGE_ID=your-edge-identifier-here \\ -e EDGE_KEY=your-edge-key-here \\ -e EDGE_INSECURE_POLL=1 \\ --name portainer_edge_agent \\ portainer/agent:latest
其中,your-edge-identifier-here
換成 Edge Indentifier 的值,your-edge-key-here
換成 Edge Key 的值