FreeBSD 上的 jail 和 Linux 上的 Docker 之间的主要区别是什么?其中一个是否比另一个更安全或性能更高?Jails 比 Docker 实例更老,因此代码本身可以被认为更安全。但 Jails 从未“流行”,所以它们可能不如 Docker 实例好?或者只是因为 Linux 比 FreeBSD 更受欢迎?
答案1
我将讨论 FreeBSD jail 和 Linux Docker 的一些方面,以及它们的相似之处和不同之处。
- 两者都服务于同一个目标:它是轻量级虚拟化的一种实现,当你在同一个内核下独立且隔离的隔间中运行应用程序时,相似之处就到此结束,而不同之处就在这里开始
- Docker 是一种主要用于运行已准备好的二进制映像的工具,这些映像可从各种公共或私有存储库中获取。大多数人都以这种方式使用它。很少有人构建自己的映像并将其上传到这些存储库中。
- FreeBSD jail 更像 Linux 中的 LXC:它是一种从头开始创建容器的方法。您创建它,将软件安装到其中,这就是全部内容 - 它可以被视为 FreeBSD 中的 FreeBSD。没有简单的方法可以将该容器导出为单个软件,就像在 Docker 中一样。因此,几乎所有使用 FreeBSD 的人,恰恰相反,总是从头开始在容器内构建自己的 FreeBSD(即从安装的基本系统开始),从 FreeBSD Ports 系统或源代码安装软件。因此,FreeBSD jail 不太友好,并且初始使用成本较高。
- 就像 LXC 容器是持久的一样,FreeBSD jail 也是持久的。所有更改在启动之间保持不变。正如我所说,它只是同一操作系统中的一个操作系统(尽管在 FreeBSD 内核中维护 ABI 之前,用户空间软件版本可能会有所不同)。这意味着您不能犯罪更改 - 一旦创建就会提交。
- 从以上所有情况可以看出,为什么 FreeBSD 容器不能像 Docker 那样拥有类似的编排层:没有端口发布,没有卷,没有链接或不同 jail 之间的任何元连接。只有联网操作系统为您提供的接口:网络套接字、unix 套接字、通用挂载点。
- 当然,对于谁可以在 FreeBSD jail 内与谁进行通信没有任何限制,因为 Docker 中也没有这种限制。
- 您可以在 FreeBSD 中运行本机 docker 映像,因为 FreeBSD 下至少部分支持 docker,但是,由于 Linux 是免费的,我强烈建议不要这样做(我真的非常喜欢 FreeBSD),因为它们将通过 Linux 兼容层(随 FreeBSD 内核模块提供)运行,这会带来一些已知的限制。