在 docker 容器中使用像 RVM 这样的版本管理器是一种不好的做法吗?

Is it a bad practice to use version managers like RVM inside docker containers?

我是 docker 的新手,到目前为止,我找不到许多包含 RVMrbenv 的 ruby/rails 图片。

我看到的最常见的事情是每个 容器 有多个 标签 并且每个标记的图像版本只有 安装了一个 版本的 Ruby。例如,参见此 image

使用其他版本的唯一方法是为您正在使用的图像使用另一个标签,因为您无法使用 RVM 或 rbenv 安装新版本。

这是故意的吗?

在 docker 容器中对编程语言使用版本管理器是一种不好的做法吗?

为什么?

这将被视为不良做法或 anti-pattern 在 docker 中。 RVM 正在尝试解决 docker 正在解决的类似问题,但采用的方法却截然不同。 RVM 专为主机或 VM 而设计,所有工具都安装在一个地方。 Docker 创建一个隔离环境,其中仅包含 运行 您的单个应用程序所需的工具。

容器是极简主义的,只包含您的应用程序所需的先决条件,使它们更便携。 Docker 还使用层和联合文件系统为每个图像重用公共基础图像,因此像 Ruby 版本 X 的任何副本仅下载并写入磁盘一次,永远(忽略对该图像的更新) ).

这取决于您将如何使用它。如果您需要在自定义 docker 图像上安装任何版本的 ruby,而不需要下载 tarball 和应用补丁,RVM 可以是完美的。 RVM 基本上是一个 bash 脚本,因此在 docker 容器内使用它与在 docker 容器内使用任何其他 bash 脚本一样糟糕。