Portainer.io 簡介

Portainer.io 簡介

jimchen5209

簡介

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

Powerful container management software for Platform Teams, DevOps, Dev

安裝

💡 以下皆以免費的 Community 版本為例。

💡 使用前必須安裝 Docker Engine (Windows 為 Docker Desktop)。

Docker Engine installation overview

  1. 建立資料 Volume

    1
    docker volume create portainer_data
  2. 執行 Portainer

    1
    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

    💡 這邊我只開 Port 9443,Port 8000 是 Edge Agent 用的,所以如果確定不會用到可以將 -p 8000:8000 移除。

  3. 註冊帳號

    前往 https://localhost:9443/

    ⚠️ Portainer 預設走 https 網址列必須打 https 才能連上。

    瀏覽器會警告連線不安全,但在內網中要使用 ssl 憑證的話會很麻煩,這邊我們直接按繼續前往即可。

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

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

💡 如果連上去後出現以下畫面:

代表你開他之後太久沒理他了,因為安全因素鎖起來,請重開 portainer 再進行初始設定。

1
docker restart portainer

Docker Standalone

使用

基本操作

登入之後映入眼簾的應該是這個首頁,目前只有一個本地環境,可以透過後面的介紹新增遠端環境。

選擇一個環境後,出現的是儀表板,會列出目前 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 資料庫:

  1. 點一下 MySQL

  2. 填上 Container 名稱和 Root 的密碼

  3. 按下 Deploy the container

好了,你成功架了一個 MySQL Server 了。

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

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

💡 你應該會發現他預設開了 MySQL 5.7,因為 MySQL 8 在容器內可能會出現 Innodb 錯誤,雖然我測試下來在實體機器的 Docker 開 8 的話沒有出現太大的問題,如果你想要升級的話,可以參考以下步驟:

  1. 點開剛剛建立的 MySQL container

  2. 按下 Duplicate/Edit

  3. 將 Image 從 mysql/mysql-server:5.7 改成 mysql/mysql-server:8.0

  4. 按下 Deploy the container,系統會問你是否取代

Stacks

Stacks 其實就是一個 Docker compose 的集中地,在這邊寫上 Docker compose 的檔案內容後,即可透過 Portainer 管理。

  1. 按下 Add stack

  2. 貼上 docker-compose.yml 的內容,以 WordPress 為例,或按下 Upload 選擇檔案

    awesome-compose/compose.yaml at master · docker/awesome-compose

  3. 如果需要指定環境變數可以在這邊設定

  4. 按下 Deploy the stack,就會開始部屬

  5. 點進去後,可以看到這個 Stack 的資訊以及他的相關 Container 並加以管理

  6. 也可以嘗試連線看看是否有架設成功

遠端管理

Portainer 提供在一個站點集中管理多台 Docker 機器的功能,設定方式也非常簡單,選擇一種情境即可。

Agent

使用此方式,這個伺服器的 Port 9001 (預設)需要可以被 Portainer 碰到,設定方式如下:

  1. 在遠端伺服器輸入以下指令架設 Agent 伺服器

    1
    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
  2. 在本機的 Portainer 上,進入 Environments 頁,並按下 Add Environment

  3. 按下 Docker Standalone

  4. 輸入遠端伺服器的名稱和位址填上遠端伺服器的 IP 和 Port 後,按下 Connect

  5. 出現新增成功後,回到首頁,就會看到遠端伺服器了

Edge Agent

如果遠端伺服器沒辦法隨便開 Port 出來,可以選擇 Edge Agent 反過來讓遠端伺服器主動把設定丟給 Portainer,此時 Portainer 就需要開 Port 8000,設定方式如下:

  1. 如果在啟動 Portainer 時沒有開 Port 8000,請重新啟動:

    1. 停止原有的 container

      1
      docker stop portainer
    2. 移除原有的 container

      1
      docker rm portainer
    3. 以 Port 8000 和 Port 9443 重新啟動 Portainer

      1
      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
  2. 在本機的 Portainer 上,進入 Environments 頁,並按下 Add Environment

  3. 按下 Docker Standalone

  4. 進入這頁,這次選擇 Edge Agent,並填上本機的 Portainer 網址,不能是 localhost

  5. 按下 Create ,Portainer 會給你一個指令,將他複製到遠端伺服器上

  6. 看一下右上角,如果出現 heartbeat 代表有收到資料

  7. 回到首頁,就會看到遠端伺服器了

更新

更新主伺服器

💡 更新時雖然不會丟設定,還是建議備份設定檔。

  1. 進入 Settings

  2. 選擇最底下的 Download Backup 下載目前的設定檔

  1. 停止原有的 container

    1
    docker stop portainer
  2. 移除原有的 container

    1
    docker rm portainer
  3. 下載最新 Image

    1
    docker pull portainer/portainer-ce:latest
  4. 啟動 Portainer

    1
    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

    💡 如果需要使用 Edge Agent ,請再加上 -p 8000:8000

Upgrading on Docker Standalone

更新 Agent

  1. 停止原有的 container

    1
    docker stop portainer_agent
  2. 移除原有的 container

    1
    docker rm portainer_agent
  3. 下載最新 Image

    1
    docker pull portainer/agent:latest
  4. 啟動 Portainer

    1
    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

  1. 在本機的 Portainer 上,進入 Environments 頁,進入要更新的 Edge Agent 伺服器,會看到兩筆 Key,等會會用到

  2. 停止原有的 container

    1
    docker stop portainer_edge_agent
  3. 移除原有的 container

    1
    docker rm portainer_edge_agent
  4. 下載最新 Image

    1
    docker pull portainer/agent:latest
  5. 啟動 Portainer

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 的值

Upgrading the Edge Agent

後記

本文是我在 2022/12 寫的公開筆記,有興趣看原文的話可以到 Notion 上看,有任何問題歡迎提出。

  • Title: Portainer.io 簡介
  • Author: jimchen5209
  • Created at : 2024-03-28 12:06:04
  • Updated at : 2024-04-14 22:27:41
  • Link: https://jw-blog.jimchen5209.me/2024/03/28/Portainer-io-簡介/
  • License: This work is licensed under CC BY-NC-SA 4.0.