我开始构建自己的媒体服务器,它将使用 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 的基本功能都是相同的(除了数据包含、服务控制和可能的细微版本差异之外)。snap
和apt
版本通常都适合生产使用,但apt
版本将允许更多低级控制和自定义的可能性。
答案2
如果您已经在系统中使用这些软件包,我建议您不要使用snap
版本docker
以及任何其他软件包。通常,在系统中使用多个不同的软件包管理器被认为是一种不好的做法,如果您使用 Ubuntu(不是 Ubuntu Core) - 您已经使用过软件包,因此使用任何软件包时都应谨慎。snap
apt
apt
snap
例如,如果您docker
通过安装(可能是通过安装依赖于 的snap
其他软件包,例如apt 存储库中不存在但可通过 获得的工具),它会默默地破坏您现有的 apt安装 - snap 会默默地覆盖,并且您当前正在运行的容器将变得不可用。您需要删除,并使用来修复。snap
docker
dive
snap
docker
/var/run/docker.sock
docker
snap
docker
systemctl restart docker.socket