通过 apt 与 snap 安装 Docker?

通过 apt 与 snap 安装 Docker?

我开始构建自己的媒体服务器,它将使用 Docker 来处理不同的软件包。主要是 Plex、Radarr 等等。

尽管我之前曾对 Linux 有过一些涉猎,但我从来不知道它snap是什么,总是使用它apt

现在我开始阅读它,我可以看到它对某些用途的吸引力,主要用于测试和独立程序,例如 GIMP。

但是,我对 Docker 感到困惑,因为它将自己的容器连接到其他容器,然后连接到系统。snap如果我通过 安装它,这是否意味着 Docker 容器在容器内snap

snap对于 Docker 来说,和之间有什么明显的区别吗apt?有什么功能上的区别吗?我以后可能会遇到的使用上的区别吗?

也就是说,如果我收到一台安装了 Docker 的计算机,我的使用方式会有所不同吗?还是都一样?

我看到有些人说snap启动速度有时比较慢,但除此之外,还有什么区别吗?

答案1

snap根据我的经验和观点,使用 Docker与安装不会有太大区别apt。然而,重要的是,你选择一个或者另一个,因为它们实际上不能共存。至于解决你的一些具体问题:

如果我通过 snap 安装它,这是否意味着 docker 容器在 snap 容器内?

从某种程度上来说确实如此。但 Docker 容器运行在隔离环境中。不过,抽象snap相当透明,因此我认为性能上不会有任何实际差异。

snap 和 apt 在 docker 方面有什么明显的区别吗?功能上有什么区别吗?我以后可能会遇到什么使用上的差异吗?

最大的区别可能在于数据的包含。摘自 Snapcraft Docker 页面:

此构建只能访问主目录中的文件。因此 Dockerfile 和 docker build、docker save 和 docker load 等命令中使用的所有其他文件都需要位于 $HOME 中。

因此默认情况下,snap版本只会访问 中的文件$HOME,而apt版本可以访问任何地方的文件。

正如您所提到的,snaps这会影响启动和加载时间 - 但主要是在较旧的系统上。在具有 SSD 磁盘的较新系统上,这应该不是问题。

此外,在运行该snap版本时,正在运行的 Docker 服务 ( docker.service) 在系统上不直接可见。这意味着无法像版本一样对 systemd 服务进行任何微调apt

最后,snap应用程序会自动更新,默认情况下会回退到最后 2 个版本。您可能会或可能不会喜欢这个。

自 2022 年 3 月 31 日起,对于 Ubuntu 20.04 Focal,apt版本Docker 的版本是 20.10.7,而snap版本是 20.10.12。

作为参考,官方 Docker 存储库中的最新版本是 20.10.14。因此,如果您想要绝对最新版本,建议apt官方 Docker 仓库

结论

总体而言,无论选择哪种安装选项,Docker 的基本功能都是相同的(除了数据包含、服务控制和可能的细微版本差异之外)。snapapt版本通常都适合生产使用,但apt版本将允许更多低级控制和自定义的可能性。

答案2

如果您已经在系统中使用这些软件包,我建议您不要使用snap版本docker以及任何其他软件包。通常,在系统中使用多个不同的软件包管理器被认为是一种不好的做法,如果您使用 Ubuntu(不是 Ubuntu Core) - 您已经使用过软件包,因此使用任何软件包时都应谨慎。snapaptaptsnap

例如,如果您docker通过安装(可能是通过安装依赖于 的snap其他软件包,例如apt 存储库中不存在但可通过 获得的工具),它会默默地破坏您现有的 apt安装 - snap 会默默地覆盖,并且您当前正在运行的容器将变得不可用。您需要删除,并使用来修复。snapdockerdivesnapdocker/var/run/docker.sockdockersnapdockersystemctl restart docker.socket

相关内容