タイトル通りですが、 rbenv を使うことができる Docker イメージを作成します。
参考
実行環境
実装
今回は、ubuntu:18.04
をベースにして rbenv を導入し、複数の ruby を使用できる docker イメージを作成します。
サンプル 2 種類はそれぞれ、ruby2.3.0 と ruby2.6.0 を導入することにします。
dockerfile を作成(パターン 1)
dockerfile1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install git curl wget bzip2 autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
RUN apt-get -y install libssl1.0-dev
RUN cd ~/ && \ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin::$PATH
RUN cd ~/ && \ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build && \ rbenv install -l && \ LDFLAGS=-L/root/.rbenv/versions/2.3.0/lib CPPFLAGS=-I/root/.rbenv/versions/2.3.0/include rbenv install 2.3.0 && \ rbenv install 2.6.0 && \ rbenv versions
|
dockerfile を作成(パターン 2)
dockerfile1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install git curl wget bzip2 autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
RUN apt-get -y install libssl1.0-dev
RUN cd ~/ && \ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv && \ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile && \ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile && \ . /root/.bash_profile && \ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build && \ rbenv install -l && \ LDFLAGS=-L/root/.rbenv/versions/2.3.0/lib CPPFLAGS=-I/root/.rbenv/versions/2.3.0/include rbenv install 2.3.0 && \ rbenv install 2.6.0 && \ rbenv versions
ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin::$PATH
|
パターン 1 とパターン 2 の違いは、環境変数の取り扱いです。
パターン 1 はENV PATH /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin::$PATH
を途中で実行し、$PATH を参照します。
パターン 2 では、. /root/.bash_profile
とすることで、.bash_profile
に書いた$PATH を参照します。
パターン 2 でも、ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin::$PATH
を最後に書きます。
これは、後の行うdocker run -it ubuntu-rbenv
の際に、.bash_profile
を読み込まないことの対策です。
もし、ENV PATH /root/~~~~
を記述しない場合は、コンテナへ入る度に、source .bash_profile
を行えばいいです。
確認
dockerfile を作成したら、dockerfile と同じディレクトリで、以下コマンドを実行。
1
| docker build -t ubuntu-rbenv .
|
しばらく眺めておきます。結構待ちます。
終わったら、以下を実行。
1 2 3 4
| docker run -it ubuntu-rbenv
rbenv versions
|
ruby2.3.8 以下をインストールする場合は、以下は次のようにします。
(確認できた範囲なので、バージョン次第で別のオプションを必要とする可能性があります。)
1 2
| LDFLAGS=-L/root/.rbenv/versions/[rubyバージョン]/lib CPPFLAGS=-I/root/.rbenv/versions/[rubyバージョン]/include rbenv install [rubyバージョン]
|
2.4.0 以降は、素直に rbenv コマンドでインストールすればいいです。
今回は、rbenv で ruby2.3.0 と ruby2.6.0 のインストールを dockerfile で実現しました。
rbenv install --list
で確認できるバージョンが多すぎるので、すべては試していません。(できるわけありません。)
試しに、2.3.0, 2.3.8, 2.4.6, 2,6,0
の 4 つを導入した docker イメージをビルドしたら、大体 1 時間ちょっとかかりました。
Macbook(pro じゃない)でやるものではないですね。
ではでは。