既存のRailsアプリについてDockerの開発環境を構築する手順について書きます。独学で試行錯誤しながらやりましたので、誤っているところなどあるもしれませんが、その際はご指摘いただけると幸いです。
2020/01/29追記
Rails6のアプリケーションをDocker化して、CIもかませるところまで含めた記事書きましたので、良かったら合わせてご覧ください。
既存のRails6アプリをDocker化しつつCircleCIでシステムスペックも実行できる環境を作る
事前準備
- Docker-for-macをインストール
- Dockerを起動させておく
詳しくはDockerでRuby on Railsの開発をしようが分かりやすいかと思います。
既存アプリにDockerで環境構築
すでにアプリが作成されているところにDockerで環境を作っていきます。
以下の作業を行います。
- Dockerfile:新規作成
- docker-compose.yml:新規作成
- database.yml:編集
Dockerfile作成
FROM ruby:2.5
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y postgresql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /myproject
ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . /myproject
上記ファイルについては、こちらの記事を参考にさせていただきました。
当初はMySQLを使用して作ろうかと考えていたのですが、エラーが出まくってしまい萎えそうだったので、Postgresqlを使用する方向に変更しました。
Dockerfileで指定するバージョンは、プロジェクトのRubyバージョンに合わせておく必要があります。
ruby '2.5.5'
docker-compose.yml作成
#docker-composeのバージョン
version: '3'
services:
db:
image: postgres
ports:
- '5432:5432' # ホストからゲストへポートフォワード
volumes:
- postgresql-data:/var/lib/postgresql/data
web:
build:
context: .
dockerfile: Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0'
tty: true
stdin_open: true
depends_on:
- db # DB側のコンテナが出来上がってからwebを実行する
ports:
- "3000:3000" # ホストからゲストへポートフォワード
volumes:
- .:/myproject # ソースコード変更したらDocker側も即反映されるように
volumes:
postgresql-data:
driver: local
上記ファイルについてはDockerでRailsの環境構築してHerokuへデプロイするを参考にさせていただきました。
database.yml編集
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password:
pool: 5
development:
<<: *default
database: myproject_development
test:
<<: *default
database: myproject_test
初期のデフォルトではsqlite3
になっているところはpostgresql
に置き換えていきます。
$ docker-compose build
$ docker-compose run web rake db:create db:migrate
$ docker-compose up
これで localhost:3000 にアクセスしたら確認できます。