跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

在Linux上安裝Docker和Portainer

[[academy-video-youtube({"vid": "-RZmUkObVXU", "start_time": "0", "title": "Installing Docker and Portainer on Linux", "creator": "Tim Corey", "length": "~18m"})]]

並非所有事情都應該直接安裝在您的操作系統上。 像 SQL Server 這樣的工具需要大量資源,不論您是否需要它們,裸機運行時這些資源都會被消耗。 容器解決了這個問題:當您需要時啟動一個,當不需要時停止它。 Docker 是驅動這一工作流程的引擎,而 Portainer 則是輕量級的 GUI,可讓您在不需要記住大量 CLI 命令的情況下輕鬆管理。

這個根據 Tim Corey's Linux 開發 系列編寫的分解詳細說明了在 Ubuntu 上的完整設定:註冊 apt 軟體庫,啟動引擎,從個人電腦中移除 sudo 要求,以及部署 Portainer CE 作為持久容器。

步驟 1:新增 Docker 的 apt 軟體庫

[3:10 - 6:00] 在可以通過 apt 安裝 Docker 之前,您需要註冊 Docker 的包來源並使您的系統有理由相信它。 Docker 提供了一個可複製的命令塊,一次粘貼即可完成所有這些操作。 前往 docs.docker.com,進入安裝部分,然後選擇 Ubuntu。 在 "使用 apt 軟體庫安裝" 部分下的命令就是您需要的。

該命令塊按順序執行多個操作:它安裝所需的證書工具,下載 Docker 的官方 GPG 密鑰,調整其存取權限,並將軟體庫地址寫入您的 apt 來源清單。從文件中複製並在終端中通過 Ctrl+Shift+V 粘貼來一次運行整個命令塊。

一個重要的點需要強調:不要盲目新增新的包來源。 在安裝其證書之前,確認您信任該來源。 Docker 是值得信賴的,但這一原則適用於您新增的每個來源。 這種方法實際上比許多包管理器預設做法更為嚴格,這是一種特性,而不是一種複雜性。

步驟 2:安裝 Docker 引擎

[6:00 - 7:10] 註冊完軟體庫後,安裝 Docker 只需一個 apt 命令即可:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
SHELL

在提示時確認,apt 會處理下載和安裝。 Docker 配置為在引導時自動啟動,因此每次重啟後它會在後台運行,不需額外的步驟。

要確認一切正常,運行 hello-world 容器:

sudo docker run hello-world
sudo docker run hello-world
SHELL

Docker 會拉取鏡像,執行它,並列印出確認資訊。 該輸出意味著您的安裝運行正常。 hello-world 容器設計為運行一次後退出; 它純粹存在於驗證引擎是否響應。

步驟 3:在不使用 sudo 的情況下運行 Docker(僅限個人電腦)

[7:45 - 10:30] 預設情況下,Docker 命令需要使用 sudo,因為管理容器是一個特權操作。 在共享伺服器或生產機器上,保留這種設置。 對於您單獨控制的個人開發機,將自己加入 docker 群組可以去掉前綴:

sudo usermod -aG docker $USER
sudo usermod -aG docker $USER
SHELL

-aG 則將當前帳戶附加到該群組。 大小寫很重要:$USER 必須大寫。 變更不會立即生效,直到您登出並重新登入; 整個系統重啟通常比簡單的登出更可靠,以便群組成員資格正確應用。 一旦更改生效,docker run hello-world 可以在不需使用 sudo 的情況下工作。

這是一種方便的折衷,而不是一種安全改進。 僅對開發機保留這一設置。

步驟 4:為 Portainer 建立一個卷

[11:30 - 12:45] 在啟動 Portainer 前,建立一個命名卷以在容器重啟和替換時持續其資料:

docker volume create portainer_data
docker volume create portainer_data
SHELL

容器本質上是短暫的,破壞一個將抹去其內部儲存的任何內容。 卷存在於容器生命週期之外,由 Docker 管理,因此即使摧毀並重建 Portainer,配置也能保存。

步驟 5:運行 Portainer 容器

[12:45 - 14:10] Portainer CE is itself a Docker container. 完整運行命令是:

docker run -d -p 9000:9000 --name portainer \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce
docker run -d -p 9000:9000 --name portainer \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce
SHELL

分解來看:-d 以分離模式運行容器,使其保持在後台。 而 -p 9000:9000 則公開主機端口 9000 並將其路由到容器內的匹配內部地址。 第一個 -v 掛載 Docker 套接字,讓 Portainer 能夠查看和控制您其他的容器和鏡像。 這種連接套接字的方式是 GUI 能夠讀取和管理您整個 Docker 環境的原因。 第二個 -v 將您剛建立的卷連接到容器內的 /data,以持久化其狀態。

portainer/portainer-ce 中抽取 (Community Edition)。 portainer.io 網站以付費的 Enterprise 級別為首,但 CE 對於本地和個人使用者是免費且完全有能力的。

導航 Portainer UI

[14:10 - 17:30] 容器啟動後,打開瀏覽器並轉到 http://localhost:9000。 Portainer 在首次存取時要求您建立管理員密碼; 密碼至少需 12 個字元。 登錄後,通過快速設置嚮導時無需新增額外的環境,然後從儀表板中選擇本地環境。

主視圖顯示摘要:下載的鏡像、存在的容器、已配置的網路和使用中的卷。 點擊進入每個部分為您提供完整的控制。 在鏡像下,您會看到 hello-world 和 Portainer CE 鏡像,這兩次執行時的拉取執行。在容器中,兩次 hello-world 執行顯示在停止狀態下,Portainer 本身處於活動運行中。

從容器面板中您可以啟動、停止或刪除任何條目。 選擇一個容器並點擊日誌會顯示其輸出。 hello-world 條目顯示它被執行的兩次所顯示的熟悉的問候語文字。 重啟容器並檢查其日誌可以確認新的輸出追加在第一個輸出之下。

卷按照其掛載路徑顯示列表。 而 portainer_data 條目顯示其位置在 /var/lib/docker/volumes/ 下,所有命名卷資料由引擎儲存在磁碟上。

為何選擇 Portainer 而非 Docker Desktop

[17:30 - 18:10] Docker Desktop 附帶 GUI,但佔用大量資源,這對於 Linux 開發機來說很重要,因為您希望系統資源可用於實際工作負載。 Portainer CE 本身作為一個容器運行,消耗的記憶體和 CPU 要少得多。 它涵蓋了實際需求:瀏覽鏡像和容器,閱讀日誌,管理卷,啟動和停止服務,全部在不增加負擔的情況下。

接下來是什麼

[17:50 - 18:30] 使用 Docker 和 Portainer 後,該系列的下一步是在容器中運行 SQL Server。 一個簡單的 docker run 命令拉取鏡像並啟動一個實例。 從 Portainer 的容器面板中,您可以在會話結束時停止它,並在需要時重新啟動它。 這個模式同樣適用於 Redis 和其他運行成本高但易於容器化的基礎架構工具。

結論

[18:30 - end] 總結一下:使用其 GPG 密鑰註冊 Docker 的 apt 軟體庫,通過 apt 安装引擎,選擇性地將使用者新增到個人電腦上的 docker 羣組,為 Portainer 建立一個命名卷,並運行映射到端口 9000 的 portainer/portainer-ce 容器。從那時起,localhost:9000 給您一個 GUI,您可以通過 GUI 管理 Linux 上的容器而不涉及目常任務的 CLI。

觀看 Tim Corey 的 YouTube 完整影片以實時機運行安裝在 頻道上。

Hero Worlddot related to 在Linux上安裝Docker和Portainer
Hero Affiliate related to 在Linux上安裝Docker和Portainer

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話