Как установить Ruby на докер?

Я пытаюсь установить рубин на докер. Я мог установить версии 1.9, но невозможно установить последнюю версию, такую ​​как 2.2.0 и выше. На самом деле я пытаюсь настроить калебас на докере. Пробовали это. Всякий раз, когда я пытаюсь установить calabash-android, он получает ошибку

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

person Muneer Muhammed    schedule 30.03.2016    source источник


Ответы (6)


Вы можете начать просмотр файла докеров, начиная с:

# 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

Это будет использовать ruby-образ docker с уже установленным ruby.

Версия 2020 взята из управления версиями Ruby с помощью docker из Арджун Дас, упомянутый ArMD в комментарии.

person VonC    schedule 30.03.2016
comment
Спасибо @VonC за вашу помощь. Могу ли я вручную установить ruby, находясь внутри контейнера? - person Muneer Muhammed; 30.03.2016
comment
@muneermuhammed нет: вы должны указать установку ruby ​​​​в Dockerfile, чтобы создать образ с установленным ruby, который затем позволяет вам запускать контейнер, в котором доступен ruby. Вы ничего не устанавливаете непосредственно в контейнер. Кроме того, если ваш Dockerfile начинается с FROM ruby:2.3.0, вам вообще не нужно устанавливать ruby. Он уже установлен для вас. - person VonC; 30.03.2016
comment
Могу ли я просто запустить команду как RUN ruby: 2.3.0, если мой файл докера начинается с FROM ubuntu: 14.04? - person Muneer Muhammed; 30.03.2016
comment
@muneermuhammed нет, RUN предназначен для команд оболочки, а не для имен образов докеров. Вам нужно будет воспроизвести в вашем Dockerfile содержимое github.com /docker-library/ruby/blob/ для установки ruby: это делается поверх дистрибутива Debian Jessie, но может работать поверх дистрибутива ubuntu. - person VonC; 30.03.2016
comment
@muneermuhammed Более простая альтернатива — использовать директиву FROM ruby:2.3.0 и посмотреть, совместимо ли то, что вы делаете, с дистрибутивом Debien jessie. - person VonC; 30.03.2016
comment
Давайте продолжим обсуждение в чате. - person Muneer Muhammed; 30.03.2016
comment
Я всегда начинаю настройку ruby ​​с файла docker, упомянутого здесь — thearjunmdas.github.io /entries/dev-with-ruby-docker - person ArMD; 09.12.2020
comment
@ArMD Спасибо. Я включил ваш комментарий в ответ для большей наглядности. - person VonC; 09.12.2020

Если вы запускаете FROM другой базовый экземпляр Docker, вы можете просто RUN установить Ruby из системы управления пакетами вашего базового экземпляра. Например, это GitHub Gist показывает, как использовать apt-get для установки Ruby на Ubuntu. экземпляр:

# Pull base image.
FROM dockerfile/ubuntu

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

И это Gist показывает Dockerfile, настроенный для установки RVM и Ruby на экземпляр Ubuntu. :

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"
person Kevin    schedule 28.11.2016
comment
Похоже, ссылка на gist с Dockerfile для ruby ​​​​через rvm неверна. Также может потребоваться добавить curl к # basics, например RUN apt-get install -y openssl curl. ссылка на суть, которую я пробовал - person Michael Malov; 13.04.2018

Это делает ruby ​​доступным для любой будущей команды RUN, а не только для 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
person grosser    schedule 30.03.2018
comment
Мне потребовалось два дня, чтобы добраться сюда, моя среда - это докер, использующий изображение openjdk: 8 для использования в конвейере сборки Android. - person hyena; 28.11.2019

Низкая репутация, поэтому я не могу комментировать встроенные (все эти годы скрытности, вздох), но на случай, если кто-то еще столкнется с этим при поиске способов установки старых рубиновых версий в докер, я нашел ответ @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, а не жестко запрограммировано на версию 2018-03-29, как в комментарии @grosser.

person Jacob    schedule 18.02.2020

Если вы хотите использовать такие вещи, как 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/*
person brainless    schedule 28.05.2020

Благодаря @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.
person Janis Peisenieks    schedule 31.03.2020