ishikawa_pro's memorandum

若手webエンジニアの備忘録です.

Swift Node.js Docker AWS etc...色々やります。

Docker x Ruby on Rails

こんにちは。
とりあえずDocker を使った Ruby on Railsの開発環境が整ったので記事にしておきます。

色々試行錯誤しましたが、rails のプロジェクトを生成するimageとrailsの実行環境のimageの二つを作ることで今は落ち着かせています。

流れとしては、
1. railsのプロジェクト生成用imageでrails new をしてホスト上にプロジェクトを生成
2.railsの実行用imageで、先程作ったプロジェクトをマウントして実行
です。

1. railsのプロジェクト生成用imageでrails new をしてホスト上にプロジェクトを生成
最初にrails プロジェクト生成用と、rails実行用の二つのimageのディレクトリを作っておきます。

$ mkdir rails-app-gene rails-app

それからrails-app-geneディレクトリ上にDockerfileを作ります。
rails new 専用のDockerfileです。

FROM ruby
MAINTAINER akira

RUN apt-get update -y &&\ 
    apt-get install -y postgresql libpq-dev node.js
RUN gem install pg &&\ 
    gem install rails

WORKDIR /usr/src/

rails-app-geneディレクトリ上で、buildします。

docker build -t rails-app-generater . 

次にコンテナを作成し、rails-appディレクトリ上にプロジェクトを生成します。

docker run -it --rm -v "rails-appのパス":/usr/src/ rails-app-generater rails new my_project

rails-app上にプロジェクトを作成しているのは、rails-appのimageをbuildする際にbundle install をするのですが、プロジェクトが構築時の コンテント 内にある必要があるからです。
--rmオプションを指定しておいて、プロジェクトの生成が終わったら自動的にコンテナを削除するようにしておきましょう。
これで、ローカル上にプロジェクトの生成が完了しました。

2.railsの実行用imageで、先程作ったプロジェクトをマウントして実行
rails-app上にDockerfileを作成します。
railsの実行用のDockerfileは以下のようになっています。

FROM ruby
MAINTAINER akira

RUN apt-get update -y &&\ 
    apt-get install -y postgresql libpq-dev node.js
RUN gem install pg &&\ 
    gem install rails

WORKDIR /usr/src/my_project
COPY ./my_project/Gemfile* ./
RUN bundle install
COPY  ./test-app .

EXPOSE 3000

rails インストール後に、プロジェクトのGemfileとGemfile.lockだけを先にマウントしてbundle install しています。
こうすることで、再度buildする際にGemfileが変更されていなければ、bundle installのキャッシュを利用してくれるので高速で buildが完了します。

Dockerfileをbuildします。

$ docker build -t rails-app .


では、コンテナを作成してみましょう。

docker run -it -v "プロジェクトのパス":/usr/src/my_project -p 3000:3000 --name my_project rails-app /bin/bash

サーバーを起動してみましょう

コンテナ上$ rails s -b 0.0.0.0

mac上からアクセスできるように、ipを指定して起動します。
macchrome から http://192.168.99.100:3000でアクセスすれば、確認できます。
f:id:ishikawa_pro:20160817140658j:plain
イラスト変わったんですね。知らなかった笑
まだPostgreSQLを使用してアプリケーションを作ってないので、動作確認ができていないですが、とりあえずうまく動く予定です。次回の記事で確認します。

確認記事を作成しました。
ishikawa-pro.hatenablog.com