hkのweblog

ひよっこエンジニアがにわとりになるまでの軌跡

Docker上にrails環境を作ろうとして苦労した話

先日、Docker上にrailsの開発環境を作ったのですが、やたら苦労して丸一日を費やしてしまいました。ということで簡単に手順をまとめておきます。

Dockerfileを作るまで

  • Dockerのインストール
    まず、Dockerをインストールします。今回はWindows10にインストールしました。こちらの公式サイト「Get Docker for Windows[stable]」からインストーラーをDLしてそれに沿って進めました。簡単ですね。

  • Dockerfileを書く
    今回ベースとなるDockerイメージはCentOS6.5にしました。rubyのバージョンは2.3.3です。 ここに必要なものを入れていくためのDockerfileを書きます。今回はDockerfileが社内に用意されていたのですが、こいつがあちこちひっかかり、丸一日苦しむことになりました。。
    以下にDockerfileの一部を書いておきます。長いのでだいぶ端折ってます。

FROM hasedon/centos6.5.1:latest

#色々インストール
RUN yum install -y tar
RUN yum install -y openssl-devel readline-devel zlib-devel
RUN yum install -y git
# 中略

# rubyインストール
RUN git clone git://github.com/rbenv/rbenv.git /usr/local/rbenv
RUN git clone git://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build
ENV PATH=$PATH:~/.rbenv/bin:~/.rbenv/shims
RUN rbenv install 2.3.3
RUN rbenv rehash
RUN rbenv install global 2.3.3
RUN gem update --system
RUN gem install --no-ru --nordoc rails
RUN gem install bundler
RUN rbenv rehash

コンテナを実行する

  • docker buildする
    先に書いたDockerfileを任意の場所に配置し、コマンドラインツールでDockerfileのある場所に移動、以下のコマンドを実行します。 こんな感じでユーザー名も設定することも可能です。(不要の場合は–build-arg name=[user name]を削ればOK)
docker build --build-arg name=[user name] ./

ここで docker image を実行すると、今buildしたイメージを確認できます。

が!自分の場合、RUN rbenv install 2.3.3のところでこけました…
色々調べたところ、インストールの際にcurlが走るようなのですが、こいつのバージョンが古すぎてダウンロードに失敗するようです。ググってみると同じ問題に直面している方を何人か見つけました。
Dockerfileの途中にRUN curl --versionと書いてビルドするとcurlのバージョンが表示されます。自分の場合は7.19.4でした。2017年8月時点で7.55.1が最新版です。

仕方ないので DockerfileのRUN rbenv install 2.3.3以下こけてしまう行はコメントアウトしてビルドし、問題を先送りします()。これでとりあえずは新しいイメージができます。

  • docker runする
    まず、 docker ps を実行すると、実行中のコンテナが表示されます。現時点で何も動いていないことが確認できるはず。 次に
docker run -v [ホストディレクトリのパス]:[コンテナのパス] [イメージ名] /bin/bash

ここでコンテナIDが返されると実行できているはずです。上記のようにマウントしなくても良いのですが、マウントしておくと後々windows上から触れるので便利です。
当然何らかのエラーを返す場合もあるようです。自分の場合はエラーは返さないけど、入力待ちにもならず…みたいな状態になりました。
原因究明に半日費やしましたが、ヤケクソでwindowsごと再起動したらうまくいくようになりました。Dockerそのものがうまく動いてなかったのか何なのか。

rubyを入れるまで

  • curlのバージョンをあげる
    先ほど後回しにした問題を解決すべく、まずは実行中のコンテナに入ります。 docker -it exec [コンテナID] /bin/bashで入れます。
    続いてcurlのバージョンを上げていきます。以下を実行していけばOK。
wget https://curl.haxx.se/download/curl-7.55.1.tar.gz
tar xfvz curl-7.55.1.tar.gz
cd curl-7.55.1 
/.cofigure --enable-libcurl-option
make
make install
  • 環境変数の設定
    これでrbenvが入れられそうなものですが、その前にrbenv周りの環境変数を設定してやる必要があります。
    どうもDockerfileに書いたやり方ではうまくいきませんでした。.bashrcとかに書いてやってもいいと思います。
    export PATH=$PATH:~/.rbenv/bin:~/.rbenv/shimsでとりあえず設定。

  • rubyのインストール
    ようやくrubyを入れられます。 先ほど後回しにしたrbenv install 2.3.3以降を実行すれば完了です。 おつかれさまでした。

やってみての所感

いきなりDockerfileを書いてbuildするとあちこち問題が起こるので、ベースのイメージを持ってきて、そこに一つ一つ入れたいものを入れていくほうがいいのかもしれません。
で、うまくできたらDockerfileにまとめておく、と。環境変数は結局どうやって書けばいいのか分からず…