Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在docker容器中使用版本管理器(如RVM)是一种不好的做法吗?_Ruby On Rails_Ruby_Docker_Rvm_Dockerfile - Fatal编程技术网

Ruby on rails 在docker容器中使用版本管理器(如RVM)是一种不好的做法吗?

Ruby on rails 在docker容器中使用版本管理器(如RVM)是一种不好的做法吗?,ruby-on-rails,ruby,docker,rvm,dockerfile,Ruby On Rails,Ruby,Docker,Rvm,Dockerfile,我刚开始使用docker,到目前为止,我找不到很多包含RVM或rbenv的ruby/rails图像 我看到的最常见的情况是,每个容器都有多个标记,每个标记的图像版本都只安装了一个版本的Ruby。看看这个例子 使用其他版本的唯一方法是对正在使用的映像使用另一个标记,因为您无法使用RVM或rbenv安装新版本 这是故意的吗 在docker容器中对编程语言使用版本管理器是一种不好的做法吗 为什么?这在docker中被认为是一种不好的做法或反模式。RVM正试图解决docker正在解决的一个类似问题,但采

我刚开始使用docker,到目前为止,我找不到很多包含
RVM
rbenv
的ruby/rails图像

我看到的最常见的情况是,每个容器都有多个标记,每个标记的图像版本都只安装了一个版本的Ruby。看看这个例子

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

这是故意的吗

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


为什么?

这在docker中被认为是一种不好的做法或反模式。RVM正试图解决docker正在解决的一个类似问题,但采用了一种非常不同的方法。RVM是为主机或VM设计的,所有工具都安装在一个地方。Docker创建了一个隔离的环境,其中只包含运行单个应用程序所需的工具


容器在理想情况下是最简单的,只包含应用程序所需的先决条件,使它们更具可移植性。Docker还使用层和联合文件系统为每个映像重用公共基础映像,因此Ruby version X之类的任何副本只下载并写入磁盘一次(忽略对该映像的更新)。

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

为什么要在一个容器中运行多个版本的Ruby?或者你为什么要在不重新构建的情况下切换容器的配置?@spickermann,正如我说的,我是Docker的新手。我觉得有点奇怪,你必须更新整个图像以使用不同的ruby版本。我也没有太多使用docker的经验,但我认为使用docker It的原因之一是可以将服务器或服务的可复制配置作为代码。一旦您在运行时更改docker容器的配置,其他人将无法在不与您讨论所做更改的情况下构建完全相同的构建。从这个角度来看,这对我来说是非常有意义的,不是在一个容器中使用多个版本的Ruby,而是将配置固定到一个特定的版本。不要投反对票,这对于那些无论如何都坚持使用RVM的人来说是一个很好的问题。回答贝娄是一个完美的解释,至少有一些证明这样的遗产爱好者。伟大的解释。了解这两个工具是如何相互关联的很好。