LoginSignup
9
9

More than 5 years have passed since last update.

Dockerfileとdocker buildで CeontOS7 + システムワイドなrbenv + ruby のコンテナを作る

Last updated at Posted at 2015-10-23

0. 前書き

docker.png   + スクリーンショット 2015-10-18 16.24.32.png +  rbenv  +  Ruby_logo.png

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

で、以下の内容を入力します。

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のイメージを下敷きにして

スクリーンショット 2015-10-18 16.24.32.png

FROM centos:centos7.0.1406

i.e.2 事前にrubyのビルド必要なパッケージを導入し

Yum-2.png

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を導入します

スクリーンショット 2015-10-18 16.17.12.png

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 必要な環境変数を設定します。

16404871853_41b7e3652c_m.jpg

すべてのユーザーで利用できるようにするため、/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_logo.png

お好みによって編集してバージョンを変えたり、削除して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ってたりするので。

おしまい

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9