如何在 docker 上安装 Ruby?

How to install Ruby on docker?

我正在尝试在 docker 上安装 ruby。我可以安装 1.9 版本,但无法安装最新版本,如 2.2.0 及更高版本。我实际上是在尝试在 docker 上设置葫芦。已尝试this。每当我尝试在其中安装 calabash-android 时出现错误

ERROR:  Error installing calabash-android:
luffa requires Ruby version >= 2.0.

您可以开始查看以以下开头的 dockerfile:

# 2016
FROM ruby:2.3.0

# 2020
# Import your ruby version
FROM ruby:2.7.1
# Install bundler gem
RUN gem install bundler
# Assign a work directory
WORKDIR /work

这将使用 docker image ruby,ruby 已经安装。

2020版本来自“Ruby version management with docker" from Arjun Das, mentioned by ArMD in .

如果您正在启动 FROM 一个不同的基础 Docker 实例,您可以简单地 RUN 命令从基础实例的包管理系统安装 Ruby。例如,this GitHub Gist 展示了如何使用 apt-get 在 Ubuntu 实例上安装 Ruby:

# Pull base image.
FROM dockerfile/ubuntu

# Install Ruby.
RUN \
  apt-get update && \
  apt-get install -y ruby

并且 this Gist 显示了一个 Docker 文件,该文件配置为在 Ubuntu 实例上安装 RVM 和 Ruby:

FROM ubuntu

RUN apt-get update

# basics
RUN apt-get install -y openssl

# install RVM, Ruby, and Bundler
RUN \curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.0"
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"

这使得 ruby 可用于任何未来的 运行 命令,而不仅仅是 bash:

FROM debian:stretch-slim
RUN \
  apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl bzip2 build-essential libssl-dev libreadline-dev zlib1g-dev && \
  rm -rf /var/lib/apt/lists/* && \
  curl -L https://github.com/sstephenson/ruby-build/archive/v20180329.tar.gz | tar -zxvf - -C /tmp/ && \
  cd /tmp/ruby-build-* && ./install.sh && cd / && \
  ruby-build -v 2.5.1 /usr/local && rm -rfv /tmp/ruby-build-* && \
  gem install bundler --no-rdoc --no-ri

低声誉所以我不能在线评论(所有这些年的潜伏,叹息),但以防万一其他人在寻找将旧 ruby 版本安装到 [=17= 的方法时遇到这个问题],我发现@grosser 的回答非常有帮助 - 它在尝试通过 RVM 安装根本不会的地方有效,至少对我来说是这样。

但是,我建议使用推荐的方法安装 ruby-build - 以下方法对我有用:

<prior steps>
RUN git clone https://github.com/rbenv/ruby-build.git && \
  PREFIX=/usr/local ./ruby-build/install.sh && \
  ruby-build -v 2.4.1 /usr/local && \
  gem install bundler -v <VERSION HERE> --no-ri --no-rdoc && bundle install
<following steps>

这里的关键点是,这使您可以使用 ruby-build 保持最新状态,而不是像@grosser 的评论那样被硬编码为 2018-03-29 版本。

感谢@Jacob 和@grosser,我已经成功地以类似的方式设置了我的:

# Install Local ruby
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv \
  &&  echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc \
  &&  echo 'eval "$(rbenv init -)"' >> ~/.bashrc

ENV HOME /home/jenkins # Change this dir as needed.
ENV PATH "$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
ENV RUBY_VERSION 2.6.3

RUN mkdir -p "$(rbenv root)"/plugins \
    && git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

RUN rbenv install $RUBY_VERSION

RUN rbenv global $RUBY_VERSION && rbenv versions && ruby -v

# RUN curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash # Uncomment this to get rbenv to validate your setup.

如果你想使用 bundle install 之类的东西,而不使用像 Ubuntu 这样预装开发工具的基础镜像,你需要安装这些包:

RUN apt-get update && apt-get install -y ruby ruby-dev ruby-bundler build-essential
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*