Docker Hubで配布されているオフィシャルのCentOS7(CeontOS.7.1.1503)のイメージを下敷きに、 rbenv + ruby 導入済みのDockerコンテナ作成します。
ただし、作成したコンテナでの作業ではなく、Dockerfileでrbenvとrubyの導入を行います。ナニソレイメージダケアレバイイデスヨ、的な人にはある意味無駄情報ですが、イメージの由来が気になる人や、自分でモニョモニョしたい人には役立つかと思います。
作成されるコンテナの中身はこんな感じです。
- CentOS 7.0.1406ベース
- rbenvはrbenvグループのユーザーで利用可能
- ruby 2.1.7
- sudo rbenvできる
#1. Dockerを導入して起動する
これは本家のサイトを確認しましょう。ネットにいろいろありますが、いろいろな意味で本家が一番よくまとまっていると思います。
Installation on CentOS - Docker Docs
#2. rbenv+rubyするDockerfileを作成する
ホームディレクトリに作業ディレクトリを作成して、そこにDockerfileを配置、記述することにしましょう。
まず作業ディレクトリを作って、viでファイルを開いて
$ mkdir ~/docker-cent-rbenv-ruby
$ cd ~/docker-cent-rbenv-ruby
$ vi Dockerfile
で、以下の内容を入力します。
FROM centos:centos7.0.1406
MAINTAINER okahashi117
RUN yum -y install make tar git wget gcc-c++ openssl-devel readline-devel gdbm-devel libffi-devel zlib-devel curl-devel procps autoconf sudo
RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
RUN mkdir /usr/local/rbenv/shims /usr/local/rbenv/versions /usr/local/rbenv/plugins
RUN groupadd rbenv
RUN chgrp -R rbenv /usr/local/rbenv
RUN chmod -R g+rwxXs /usr/local/rbenv
RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
RUN chgrp -R rbenv /usr/local/rbenv/plugins/ruby-build
RUN chmod -R g+rwxs /usr/local/rbenv/plugins/ruby-build
RUN /usr/local/rbenv/plugins/ruby-build/install.sh
RUN git clone https://github.com/sstephenson/rbenv-default-gems.git /usr/local/rbenv/plugins/rbenv-default-gems
RUN chgrp -R rbenv /usr/local/rbenv/plugins/rbenv-default-gems
RUN chmod -R g+rwxs /usr/local/rbenv/plugins/rbenv-default-gems
RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh
RUN echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
RUN echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
RUN echo '%rbenv ALL=(ALL) ALL' >> /etc/sudoers
RUN su -l root -c '/usr/local/rbenv/bin/rbenv install 2.1.7 -v'
RUN su -l root -c '/usr/local/rbenv/bin/rbenv rehash'
RUN su -l root -c '/usr/local/rbenv/bin/rbenv global 2.1.7'
やや長いですが、やっていることは単純で...
i.e.1 centos7のイメージを下敷きにして
FROM centos:centos7.0.1406
i.e.2 事前にrubyのビルド必要なパッケージを導入し
RUN yum -y install make tar git wget gcc-c++ openssl-devel readline-devel gdbm-devel libffi-devel zlib-devel curl-devel procps autoconf sudo
i.e.3 rbenvと、ruby-build, rbenv-default-gemを導入します
rbenvグループのユーザーでで利用可能とするため、rbenvグループを作成するとともに、rbenv自体は /usr/local/rbenv以下に導入します。
rbenv-default-gemは実際何も設定していませんが、gemパッケージの導入をかねて導入しています。
RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
RUN mkdir /usr/local/rbenv/shims /usr/local/rbenv/versions /usr/local/rbenv/plugins
RUN groupadd rbenv
RUN chgrp -R rbenv /usr/local/rbenv
RUN chmod -R g+rwxXs /usr/local/rbenv
RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
RUN chgrp -R rbenv /usr/local/rbenv/plugins/ruby-build
RUN chmod -R g+rwxs /usr/local/rbenv/plugins/ruby-build
RUN /usr/local/rbenv/plugins/ruby-build/install.sh
RUN git clone https://github.com/sstephenson/rbenv-default-gems.git /usr/local/rbenv/plugins/rbenv-default-gems
RUN chgrp -R rbenv /usr/local/rbenv/plugins/rbenv-default-gems
RUN chmod -R g+rwxs /usr/local/rbenv/plugins/rbenv-default-gems
i.e.4 必要な環境変数を設定します。
すべてのユーザーで利用できるようにするため、/etc/profile.d以下にシェルファイルを配置しています。
/etc/sudoersへの編集はsudo対応のためです。
rbenvグループに対してsudoの実行を許可しています。なお、sudo実行するとPATH情報が引き継がれませんが、これはsudoの実行時の -i オプションで対応します。
sudoersを直接編集していますので気をつけて。
RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh
RUN echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
RUN echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
RUN echo '%rbenv ALL=(ALL) ALL' >> /etc/sudoers
###i.e.5 最後、実際にrbenvのコマンドによってruby 2.1.7をインストールし既定に設定しています。
お好みによって編集してバージョンを変えたり、削除してrubyの導入をやめる(コンテナ作成後に実施)でもよいと思います。
RUN su -l root '/usr/local/rbenv/bin/rbenv install 2.1.7 -v'
RUN su -l root '/usr/local/rbenv/bin/rbenv rehash'
RUN su -l root '/usr/local/rbenv/bin/rbenv global 2.1.7'
#2. Docker イメージ作成
以下のコマンドを実行します。
$ cd ~/docker-cent-rbenv-ruby
$ sudo docker build -t centos7-rbenv-ruby:1 .
それなりの時間(環境にもよりますが5分くらい?)がかかりますが、気楽に待ちましょう。
べろべろときて...
...(中略)
Step 21 : RUN su -l root -c '/usr/local/rbenv/bin/rbenv global 2.1.7'
---> Running in 3ba885ade337
---> 8fb3001717ca
Removing intermediate container 3ba885ade337
Successfully built 8fb3001717ca
#3. Docker コンテナ起動
$ sudo docker run -i -t centos7-rbenv-ruby:1 /bin/bash
#4. 確認
本来いろいろ確認することはありますが、ざっくりいきましょう。
とりあずrbenv -v コマンド。
# rbenv -v
rbenv 0.4.0-169-g0f44c57
rubyのインストール状況確認。
# rbenv versions
* 2.1.7 (set by /usr/local/rbenv/version)
rubyコマンド確認。
# ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x86_64-linux]
ユーザー変更からの動作確認
# useradd test
# usermod -G rbenv test
# passwd test
Changing password for user test.
New password: *設定したパスワード*
Retype new password: *設定したパスワード*
passwd: all authentication tokens updated successfully.
# su test
$ rbenv -v
rbenv 0.4.0-169-g0f44c57
$ rbenv versions
* 2.1.7 (set by /usr/local/rbenv/version)
$ ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x86_64-linux]
ruby別バージョン(2.0.0. p467)追加。
$ rbenv install 2.0.0-p647
...(中略)
-> https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p647.tar.gz
Installing ruby-2.0.0-p647...
Installed ruby-2.0.0-p647 to /usr/local/rbenv/versions/2.0.0-p647
$ rbenv versions
2.0.0-p647
* 2.1.7 (set by /usr/local/rbenv/version)
sudoコマンドによるrbenv globalの実行と結果確認。
-iオプションを忘れないこと。
$ sudo -i rbenv global 2.0.0-p647
[sudo] password for test:
$ rbenv vresions
* 2.0.0-p647 (set by /usr/local/rbenv/version)
2.1.7
別ユーザー(root)側にも反映されていることの確認
$ exit
# rbenv versions
* 2.0.0-p647 (set by /usr/local/rbenv/version)
2.1.7
gemが使えることの確認。
バージョン確認と試しのbundlerインストール。
# gem -v
2.0.14.1
# gem install bundler
Fetching: bundler-1.10.6.gem (100%)
Successfully installed bundler-1.10.6
Parsing documentation for bundler-1.10.6
Installing ri documentation for bundler-1.10.6
1 gem installed
#5. その他
適宜Dockerfileは用途にあわせていじってください。
余計なものもyumってたりするので。
おしまい