網站搜尋

在 Fedora Silverblue 上使用工具箱入門


在本指南中,我們將討論什麼是 Toolbox以及如何在 Fedora Linux 上使用 Toolbox 創建和管理容器化開發環境。

介紹

近年來,Linux 容器虛擬化獲得了很大的動力。事實上,新一代的虛擬化是容器化。

如今,應用程式開發人員大多使用容器作為他們的首選開發環境。現有許多工具可用於創建和管理 Linux 容器。Podman、Docker、Vagrant 是一些流行的容器管理應用程式。

今天,我們將討論另一個名為 Toolbox 的實用工具,它使在日常軟體開發中使用容器化環境變得簡單。

什麼是工具箱?

Toolbox 是 Fedora 提供的一個內部工具,用於在您的 Fedora 基礎系統上建立容器化的命令行環境。

它在建立一次性使用的軟體開發環境時特別有用,在該環境中可以安裝和使用開發工具及程式庫。

工具箱是專門為基於 OSTree 的系統開發的,例如 Fedora Core OS 和 Fedora Silverblue。正如你可能已經知道的,基於 OSTree 的系統是不可變的。

Toolbox 建立在 OCI 容器映像和 Podman 之上。部署容器不需要任何 root 權限。好處是 Toolbox 的安裝和使用非常簡單且容易記住!

為什麼選擇工具箱?

不可變作業系統的實際目標是阻止在主機系統上安裝軟體,並鼓勵使用者將軟體安裝在容器中。

與基於 OSTree 的系統不同,容器是完全可變的。因此,你可以在容器內安裝你喜歡的開發和除錯工具、編輯器和 SDK。沒有任何東西會安裝在主機系統上。

用通俗的說法,我們可以在不可變的主機作業系統上,借助 Toolbox 部署一個可變的容器。

工具箱如何運作?

預設情況下,Toolbox 會根據您目前的系統建立容器。例如,如果您的基礎系統是 Fedora 35,那麼 toolbox 將會建立一個基於 Fedora 35 的容器。在這個容器中,您可以使用像 yum 或 dnf 這樣的套件管理器來安裝您喜歡的應用程式。您也可以建立基於其他 Fedora 版本的容器。

你可以同時啟動多個容器,並同時處理不同的專案。一旦你完成了容器的使用,只需刪除它,並隨時創建一個新的容器。同樣,主機系統不會受到任何影響。這樣我們可以保持主機操作系統的整潔。這也將大大避免混亂,並減少重新安裝主機操作系統的過程。

在 Fedora 上安裝工具箱

Toolbox 預先安裝在 Fedora Silverblue 30 及更新版本上。在 Fedora 工作站上,您可以使用 dnf 或 yum 套件管理器來安裝它:

$ sudo dnf install toolbox

或者,

$ sudo yum install toolbox

在 Fedora Silverblue 上使用工具箱入門

工具箱提供少量命令來創建、列出、進入和移除容器。

1. 顯示工具箱幫助

如果你是 Toolbox 的新手,最好顯示 Toolbox 幫助部分,以了解每個命令的功能。要查看 Toolbox 幫助,請使用以下任意一個命令:

$ toolbox --help
$ toolbox help
$ toolbox -h

現在讓我們開始創建新的容器。

2. 創建一個新容器

要基於您當前的 Fedora 作業系統版本創建新的容器,只需運行:

$ toolbox create

此指令將在您的本地系統中搜尋用於構建容器的基礎映像。如果未找到本地映像,系統將提示您下載相應的映像。輸入 y 並按 ENTER 鍵以下載映像。

範例輸出:

Image required to create toolbox container.
Download registry.fedoraproject.org/fedora-toolbox:33 (500MB)? [y/N]: y
Created container: fedora-toolbox-33
Enter with: toolbox enter

使用工具箱建立新的容器

工具箱將從 Fedora 註冊表下載與您當前主機系統操作系統版本相匹配的映像,並基於下載的映像創建一個新的容器。這些映像通常是實際發行版的精簡版本。

2.1. 使用自訂名稱建立容器

工具箱會自動為新建立的容器分配一個唯一的名稱(例如,fedora-toolbox-33)。

如果你想要建立一個自訂名稱的容器,使用 --container 或 -c 標誌,然後跟上容器的名稱,如下所示:

$ toolbox create --container mytoolbox-f33

或簡而言之:

$ toolbox create -c mytoolbox-f33

這裡,mytoolbox-f33 是容器的名稱。

3. 基於特定作業系統版本建立一個新容器

如我先前所提,Toolbox 會根據目前的作業系統版本建立容器。例如,如果你正在使用 Fedora 34,Toolbox 將會建立一個基於 Fedora 34 映像的容器。

不過,你也可以基於其他版本來創建容器。我在我的 Fedora 33 Silverblue 版本上使用以下命令創建了一個 Fedora 32 容器:

$ toolbox create --release f32

或者簡而言之,

$ toolbox create -r f32

4. 列出容器

要列出您系統上所有本地可用的容器,請執行:

$ toolbox list

範例輸出:

IMAGE ID      IMAGE NAME                                        CREATED
9659c2039e64  registry.fedoraproject.org/f32/fedora-toolbox:32  4 months ago
675192cc4238  registry.fedoraproject.org/fedora-toolbox:33      4 weeks ago

CONTAINER ID  CONTAINER NAME     CREATED         STATUS      IMAGE NAME
2cfb48d6a6c5  fedora-toolbox-32  4 months ago    exited      registry.fedoraproject.org/f32/fedora-toolbox:32
1f709997b871  fedora-toolbox-33  27 minutes ago  configured  registry.fedoraproject.org/fedora-toolbox:33
列出工具箱容器

如你在上述輸出中所見,我的系統上有兩個容器,分別是 fedora-toolbox-32 和 fedora-toolbox-33。

輸出頂部部分顯示用於創建容器的基礎映像的詳細資訊,例如映像 ID、映像名稱以及這些映像的創建時間。在底部部分,您將看到容器的詳細資訊,例如容器 ID、容器名稱、容器的創建時間以及容器的狀態。

您也可以單獨顯示容器詳細資訊或映像檔詳細資訊。若僅列出容器詳細資訊,請使用 --containers、-c 選項:

$ toolbox list --containers
 CONTAINER ID  CONTAINER NAME     CREATED       STATUS   IMAGE NAME
 2cfb48d6a6c5  fedora-toolbox-32  4 months ago  running  registry.fedoraproject.org/f32/fedora-toolbox:32
 1f709997b871  fedora-toolbox-33  21 hours ago  running  registry.fedoraproject.org/fedora-toolbox:33

要僅列出圖片,使用 --images、-i 參數:

$ toolbox list --images
 IMAGE ID      IMAGE NAME                                        CREATED
 9659c2039e64  registry.fedoraproject.org/f32/fedora-toolbox:32  4 months ago
 675192cc4238  registry.fedoraproject.org/fedora-toolbox:33      4 weeks ago

請注意,容器名稱和映像名稱看起來幾乎相同,除了名稱的最後部分。

容器名稱通常在名稱的最後部分之前有 連字號 (-)(例如,fedora-toolbox-33),而映像名稱則有 冒號 (:)(例如,fedora-toolbox:33)。

5. 進入容器

我們已經創建了容器,但還沒有進入它們。所以讓我們使用以下命令進入一個容器:

$ toolbox enter

一旦你進入容器,shell 提示符前會加上一個 鑽石 符號,如以下輸出所示:

⬢[sk@toolbox ~]$ 

你有注意到提示最左邊的菱形符號嗎?那表示你在容器內。

一個工具箱容器正在 Fedora Silverblue 中運行

容器與您目前的作業系統無縫整合。在每個容器內,您會找到您現有的使用者名稱和權限。

您可以像從主機系統一樣訪問您的主目錄和其他幾個位置。您還可以訪問系統和會話 D-Bus、系統日誌以及 Kerberos 等。

每個容器都包含常用的命令行工具,包括一個套件管理器(例如,在 Fedora 上的 DNF)。因此,你可以在容器內安裝和測試任何軟體。

例如,以下命令會安裝所有必要的開發工具:

$ sudo yum groupinstall "Development Tools"

5.1. 進入特定容器

當你在沒有任何選項的情況下執行 toolbox enter 命令時,它會打開預設的工具箱容器。預設容器是基於你的主機作業系統的容器。

如果你想打開不同的容器,請像下面這樣明確地提到它的名稱:

$ toolbox enter -c fedora-toolbox-32

這裡,-c 用於指容器名稱,而 fedora-toolbox-32 是容器名稱。

6. 退出工具箱

當你使用完容器後,只需輸入 exit 以登出容器。

$ exit

7. 在容器中執行命令而無需進入容器

Toolbox 的一個顯著特點是你可以在容器上執行命令而不需要進入容器。以下命令會從主機系統顯示默認容器的發行版本:

$ toolbox run cat /etc/redhat-release
Fedora release 33 (Thirty Three)

當你在沒有任何選項的情況下執行 toolbox run 命令時,它將在預設容器上執行命令。你也可以通過使用 --container 或 -c 標誌來指定容器名稱,在其他容器上執行命令:

$ toolbox run -c fedora-toolbox-32 cat /etc/redhat-release
Fedora release 32 (Thirty Two)

在工具箱容器中運行命令而無需進入它們

8. 停止運行容器

當你退出容器後,它會繼續運行,直到你停止它。沒有直接的 toolbox 命令可以停止正在運行的容器。然而,我們可以使用 podman 命令來停止 toolbox 容器:

$ podman container stop fedora-toolbox-33

請記住,Toolbox 在底層使用 podman。

9. 移除工具箱容器和映像檔

如果你不想要容器或它的基礎映像,你可以像下面這樣簡單地將它們刪除。

在刪除容器之前,請確保你已經退出該容器。

要移除容器,請執行:

$ toolbox rm fedora-toolbox-32

上述命令會移除名為 fedora-toolbox-32 的容器。

即使容器正在運行,也可以使用 --force、-f 標誌強制移除容器:

$ toolbox rm -f fedora-toolbox-32

要移除所有容器,請使用 --all、-a 參數:

$ toolbox rm --all

透過列出可用的容器來確認容器是否已被刪除:

$ toolbox list

同樣地,您可以使用 toolbox rmi 指令來移除工具箱映像,如下所示:

$ toolbox rmi fedora-toolbox:32

請注意上面命令中的 i。rm 命令用於刪除容器,而 rmi 命令用於刪除映像。此外,別忘了提到要刪除的映像的正確名稱。

要移除所有映像,請使用 --all、-a 參數:

$ toolbox rmi --all

使用 podman 管理 toolbox 容器和映像

由於 Toolbox 僅是 Podman 的包裝器,你可以直接使用 podman 指令來管理容器。

要使用 podman 命令列出工具箱容器,請執行:

$ podman ps -a

要使用 podman 列出工具箱映像,請運行:

$ podman images

啟動容器:

$ podman start fedora-toolbox-33

要查看所有運行中容器的實時資源使用統計信息:

$ podman stats

停止容器:

$ podman stop fedora-toolbox-33

檢查容器:

$ podman inspect fedora-toolbox-33

移除容器:

$ podman rm <container-name>

移除圖片:

$ podman rmi <image-name>

有許多 podman 命令可用。您可以從 podman 幫助部分查看所有可用的一般命令和選項:

$ podman --help

結論

容器不僅僅是用於實驗和學習,它們也非常適合用於隔離的開發環境,在那裡你可以在不同的操作系統版本上進行不同的項目開發。Toolbox 使容器管理變得更加簡單和優秀!

資源:

  • 工具箱文件
  • 工具箱 GitHub 儲存庫