Railsアプリの開発環境を手軽に作るためにDockerでの構築を行なっていきます。
まず、最初にこちらの手順でも構築は問題ありませんが、手順があまり綺麗でないのでその辺りを整備したものを次に記載します。
次回:DockerでRails5.2の環境を構築する その2
https://developer-collaboration.com/2018/08/07/docker-rails5-2-2/
さて、手順の参考としては公式ドキュメントにある「Rails and PostgreSQL」を参考にします。
https://docs.docker.com/compose/rails/#connect-the-database
主な手順は以下のようになります。
1. rubyのイメージを利用したDockerコンテナでrails5.2をインストールしたイメージを作成。
2. 上記イメージとpostgresのイメージでコンテナを作成し、rails newでアプリの作成。
3. rails newしたデータとGemfileを利用してbundle installしたイメージを再作成。
4. コンテナを起動して「rake db:create」を実施。
構築環境の準備
どこか適当なディレクトリを作成し以下の6つのファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
FROM ruby:2.5.1 ENV APP_HOME /myapp RUN apt-get update -qq && \ apt-get install -y --no-install-recommends \ build-essential \ libpq-dev \ nodejs && \ apt-get clean WORKDIR $APP_HOME ENV BUNDLE_JOBS=4 COPY Gemfile Gemfile.lock $APP_HOME/ RUN bundle config build.nokogiri --use-system-libraries RUN bundle install ADD myapp/. /myapp |
最後の行の「ADD」コマンドはイメージ再作成の時から使われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
version: '3' services: db: image: "postgres:10.4" environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=password" volumes: - ./tmp/db:/var/lib/postgresql/data ports: - "5432:5432" web: build: context: . command: bundle exec rails s -p 3000 -b '0.0.0.0' env_file: - "./.env.dev" volumes: - ./myapp:/myapp ports: - "3000:3000" depends_on: - db |
1 2 3 4 5 6 |
DATABASE_HOST=db DATABASE_PORT=5432 DATABASE_USER=postgres DATABASE_PASSWORD=password |
1 2 3 4 |
source 'https://rubygems.org' gem 'rails', '~> 5.2.0' |
1 2 3 |
こちらは上記は空ファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('DATABASE_USER') { 'root' } %> password: <%= ENV.fetch('DATABASE_PASSWORD') { 'password' } %> host: <%= ENV.fetch('DATABASE_HOST') { 'localhost' } %> port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %> development: <<: *default database: myapp_development test: <<: *default database: myapp_test production: <<: *default database: myapp_production |
アプリ名を変更するときは「myapp」の部分を全て書き換えてください。
実際の環境構築ではDBのパスワードなども変更してください。
コンテナの作成
公式との大きな違いはアプリ環境やDBデータを直下でなく専用フォルダに移動しました。
以下のコマンドを実行します
1 2 3 4 5 6 |
$ mkdir myapp $ cp -p Gemfile.sample Gemfile $ cp -p Gemfile.lock.sample Gemfile.lock $ docker-compose run web rails new . --force --database=postgresql |
ここで一旦、Railsのコンテナが作成され「rails new」でプロジェクトが作成されます。
こちらのファイルを利用してDockerイメージの再作成を行いたいので以下のコマンドを実行します。
1 2 3 4 5 6 7 8 |
$ sed -i -e "s/# gem 'mini_racer', platforms: :ruby/gem 'mini_racer', platforms: :ruby/g" ./myapp/Gemfile $ cp -p database.yml myapp/config/. $ cp -p ./myapp/Gemfile . $ docker-compose build |
bundleインストールの対象として「mini_racer」を利用したいのでコメントから削除しています。
ここで以下のコマンドを実施し、コンテナを起動します。
1 2 3 |
$ docker-compose up |
アプリ的にはlistenの状態にはなっていますが、DBが作成されていないので以下のコマンドを別ターミナルから実行します。
1 2 3 |
$ docker-compose run web rake db:create |
これでブラウザで「http://localhost:3000/」にアクセスすると無事Railsの初期画面が確認できます。
さて、これで「docker-compose up」を毎度実行すれば開発環境は起動するのですが、Dockerイメージの再作成をしたりと手順があまり洗練されていなかったので、次ではこちらを修正したいと思います。
尚、今回以下のサイトなどを参考にさせていただきました。
Rails 5.2 開発環境を Docker で構築する
https://developer.feedforce.jp/entry/2018/02/11/140012
Springが動くRails+MySQLなAPIサーバの開発環境をDocker Composeで作る
http://blog.kymmt.com/entry/compose-and-rails-api-with-spring
高速に開発できる Docker + Rails開発環境のテンプレートを作った
https://qiita.com/kawasin73/items/2253523be18e5afd994f
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など