LoginSignup
125
161

More than 3 years have passed since last update.

既存のRailsアプリにDockerを導入する手順

Last updated at Posted at 2019-04-25

既存のRailsアプリについてDockerの開発環境を構築する手順について書きます。独学で試行錯誤しながらやりましたので、誤っているところなどあるもしれませんが、その際はご指摘いただけると幸いです。

2020/01/29追記

Rails6のアプリケーションをDocker化して、CIもかませるところまで含めた記事書きましたので、良かったら合わせてご覧ください。

既存のRails6アプリをDocker化しつつCircleCIでシステムスペックも実行できる環境を作る

事前準備

詳しくはDockerでRuby on Railsの開発をしようが分かりやすいかと思います。

既存アプリにDockerで環境構築

untitled_—_tweet_app.jpg
すでにアプリが作成されているところにDockerで環境を作っていきます。

以下の作業を行います。

  • Dockerfile:新規作成
  • docker-compose.yml:新規作成
  • database.yml:編集

untitled_—_tweet_app.jpg
⬆︎Docker関連のファイル配置場所

Dockerfile作成

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バージョンに合わせておく必要があります。

Gemfile
ruby '2.5.5'

docker-compose.yml作成

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編集

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 にアクセスしたら確認できます。

参考にさせていただいた記事

125
161
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
125
161