如果你计划在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安装的软件更长的时间。