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にまとめておく、と。環境変数は結局どうやって書けばいいのか分からず…