こんにちは。
とりあえず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を指定して起動します。
mac のchrome から http://192.168.99.100:3000でアクセスすれば、確認できます。
イラスト変わったんですね。知らなかった笑
まだPostgreSQLを使用してアプリケーションを作ってないので、動作確認ができていないですが、とりあえずうまく動く予定です。次回の記事で確認します。
確認記事を作成しました。
ishikawa-pro.hatenablog.com