rbenv が入った docker image を作りたい人生だった


はじめに

rbenv の入った docker image を作りたかった。
OS は ubuntu を使うことにした。

Dockerfile

Dockerfile
FROM ubuntu:xenial

# Require to install ruby
RUN apt-get update && \
    apt-get install -y \
    git \
    build-essential \
    libssl-dev \
    libreadline-dev \
    zlib1g-dev

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

ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:$PATH

# Install ruby-build & ruby
RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build && \
    ~/.rbenv/bin/rbenv install 2.5.1 && \
    ~/.rbenv/bin/rbenv global 2.5.1

# Initiarize ruby encording
ENV RUBYOPT -EUTF-8

# Install bundler
RUN ~/.rbenv/bin/rbenv exec gem install bundler -v 1.16.3

やってること

Require to install ruby

下記、ruby・rbenv のダウンロードおよびコンパイルに必要なモジュールのインストール。

  • git
  • build-essential
  • libssl-dev
  • libreadline-dev
  • zlib1g-dev

Install rbenv

リポジトリからソースを落としてくる

git repository から clone してパスを通している。
https://github.com/rbenv/rbenv#basic-github-checkout

明示的にパスを通す

~/.bashrc に書き加えただけだと GitLab CI で利用しようとしたときにデフォルトでパスが通らなかったので ENV PATH ... で明示的に指定している。

Initiarize ruby encording

ruby のエンコーディングを UTF-8 としている。
デフォルト だと US-ASCII になっており bundle install が動かなかった。

Install ruby-build & ruby

また、 docker build している最中はインストール後でも rbenv のパスが通ってないので ~/.rbenv/bin/rbenv exec ... みたいなノリでフルパスを指定しなければならなかった。。

業務都合でデフォルトの version は 2.5.1 としている。

Install bundler

bundle install したかったので bundler をいれた。
Gemfile.lockBUNDLED WITH の version と合わせる必要があったので version を固定にしている。

終わりに

このコンテナで社で負債になっている chef-repo を動かしたかったんだけどビクともしなかった(笑