如果你計劃在Ubuntu或基於Debian的系統上安裝Docker,那麼你可以使用APT軟體包管理器或Snap通用軟體包安裝程序。然而,使用APT和Snap安裝Docker有什麼區別呢?本文將對此進行探討。
軟體包管理器
首先讓我們了解一下Ubuntu中這兩個軟體包管理器的一些知識。
apt (Advanced Package Tool): APT是Debian、Ubuntu和其他類似的Linux發行版系統上的默認軟體包管理器。APT通過管理軟體庫並通過它們安裝可用的Debian軟體包(軟體)來實現。它甚至可以安裝本地可用的Debian二進位文件。
snap (SNAP Package Manager): Snap是一種通用軟體包管理器,因為它不僅限於Ubuntu或基於Debian的系統,而是可以在所有流行的Linux系統上進行配置和使用,包括RedHat和OpenSUSE。這是因為Snap軟體包是自包含的,並包含所有必要的依賴項,使它們獨立於底層系統。此外,Snap也不依賴於系統軟體庫來獲取軟體包,而是其開發者(Canonical)創建了一個集中化的SNAP商店,允許輕鬆的軟體包分發和更新。
因此,如果你使用APT,則Docker將通過系統默認軟體庫或手動添加的官方軟體庫安裝。而Snap將直接在其集中化的商店中搜索以安裝Docker。
了解更多 - 如何在Ubuntu Linux上使用SNAP安裝Docker
軟體包隔離
現在,你知道了APT和Snap是什麼,所以如果你打算使用它們中的任何一個來安裝Docker這樣的軟體包,那麼就要知道它如何與系統交互。
apt: 如果我們通過APT安裝Docker或任何其他軟體包,它將在系統範圍內安裝,以便任何其他程序可以訪問它,如果需要的話。然而,如果多個軟體包需要不同版本的同一庫,則可能導致版本衝突和依賴性問題。
例如,如果你已經使用系統軟體庫安裝了Docker,並且現在想要使用其官方軟體庫獲取最新版本的Docker,則必須首先完全刪除先前的版本,否則可能會出現問題。
snap: SNAP軟體包是隔離的,這意味著使用它安裝的軟體不會干擾主機系統或其他軟體包。這是因為Sandboxed環境,Snap軟體包與系統的其餘部分隔離,並包含其自己的依賴項。這種軟體包配置方式提供了更好的穩定性,並避免了不同應用程序和庫之間的衝突。但是,這個特性並不是使用Snap安裝Docker的基準,因為容器本身是在一個隔離的環境中運行的。
這也意味著我們可以在單個系統上安裝使用APT和使用SNAP兩個不同實例的相同軟體。
工作目錄
APT與主機系統緊密集成,並使用通用系統目錄來解壓和安裝軟體包,包括Docker,因此在安裝後可以在 /usr/bin/ 目錄下找到其可執行文件。但是,Snap安裝的軟體包不是這樣,因為它使用一個沙盒環境,因此使用Snap配置的所有軟體都位於 ~/snap 目錄中,但具有自己的目錄。
因此,如果使用Snap安裝了Docker服務,你不能使用默認的 systemctl 命令來啟動或停止它。
更新
當涉及到使用APT更新已安裝的軟體包時,這些軟體包將通過常規系統更新命令進行更新。但是,運行它將更新所有已安裝的軟體包,除非你手動阻止某個特定軟體包的更新。
在SNAP中,軟體包的更新可以單獨進行,這意味著如果你只想將Docker更新到最新版本而不更新其他軟體包,則可以這樣做。儘管默認情況下,Snap守護程序設置為定期檢查更新並在後台安裝它們,但如果需要,我們可以禁用它。要執行此操作的命令是:snap refresh --hold
,要重新啟用自動更新服務,可以使用 snap refresh --unhold
。
Docker版本的可用性
這是使用APT或Snap安裝Docker時的一個關鍵區別,因為通過Ubuntu和APT默認系統軟體庫安裝的Docker版本不會是最新的版本。如果想要使用APT獲取最新版本,則需要手動將官方Docker倉庫添加到系統中。
然而,這不是使用SNAP的情況,因為它的軟體包通常由上游開發人員或維護人員維護和提供。因此,你將直接從SNAP商店或命令行中獲得更廣泛的Docker版本,包括最新版本。
現在,我們已經了解了使用APT和Snap安裝Docker的區別,那麼應該選擇哪個呢?
如果你想要使用本機系統的工作目錄和系統服務命令來管理Docker,那麼你可以使用APT軟體包管理器。因為許多需要Docker的第三方應用程序可以輕鬆識別它是否是使用APT安裝的。
而那些不想為其最新版本手動添加官方APT Docker倉庫的人可以使用SNAP以一條命令獲取Docker。
此外,通常情況下APT安裝的軟體包速度更快,因為Snap使用壓縮的SquashFS文件系統格式,因此當你使用Snap安裝的軟體時,系統需要解壓縮它,如果你的應用程序大小較大,則啟動它需要比APT安裝的軟體更長的時間。