Ruby
Rails
docker
docker-compose

Rails5.1をDocker 3に乗せて開発する

はじめに

Dockerの勉強をするために趣味で開発しているRailsプロジェクトを途中からDockerで立ち上げるようにしました。
その際の手順と感じたことをメモしていきます。

今回はRails newからではなく、もともとあるプロジェクトをDockerで立ち上げていくようにします。

バージョン

  • Docker for mac 17.12.0-ce-mac49
  • Docker 3
  • Ruby 2.4.2
  • Rails 5.1.4

Rubyのimageをpull

$ docker pull ruby:2.4.2

Dockerfile

まずはDockerfileを設定していきます。
railsプロジェクトのルート直下にDockerfileというファイルを作成します。

今回Dockerfileでやっていることとしては、ruby:2.4.2のimageを元にRailsプロジェクトを立ち上げるimageを作成しています。

Dockerfile
FROM ruby:2.4.2

RUN mkdir /app

ENV APP_ROOT /app

WORKDIR $APP_ROOT

# 必要なものをインストール
RUN apt-get update
RUN apt-get install -y nodejs mysql-client --no-install-recommends
RUN rm -rf /var/lib/apt/lists/*

# ホスト側のGemfileをコピー
ADD Gemfile $APP_ROOT
ADD Gemfile.lock $APP_ROOT

# bundle install
RUN  bundle config --global build.nokogiri --use-system-libraries
RUN  bundle config --global jobs 4
RUN  bundle install

ADD . $APP_ROOT

# docker runした時に起動するコマンドを設定、ポートは3000を設定
EXPOSE  3000
CMD ["rails", "server", "-b", "0.0.0.0"]
  • Railsプロジェクトのルートディレクトリで以下を実行してimageを作成します。
docker build -t project_name .
  • -tオプションをつけることでリポジトリ名をつけることができます
  • docker imagesを実行してimageが確認できれば成功
$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
project_name        latest              bfdf79815c47        About a minute ago   1.32GB

docker-compose

次にdocker-composeを作成してコンテナ起動の設定をしていきます
ここでは主に環境変数の設定とボリュームの指定、ポートの設定を行なっています(ちょっとまだ理解しきれていない感じがするので、もっと改善する場所があるかもしれないです..特にボリューム)

docker-compose.yml
version: '3'
services:
  app:
    build: .
    command: bin/rails s -b "0.0.0.0"
    env_file: .env # railsの環境変数を.envで記載する場合
    ports:
      - "3000:3000"
    volumes:
      - ".:/app"
    depends_on:
      - db
  db:
    image: mysql:5.7.10
    environment:
      MYSQL_ROOT_PASSWORD: password # 本番環境では別ファイルで管理すること
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/mysql-data:/var/lib/mysql
volumes:
  mysql-data:
  • 作成できたらコンテナをビルドします
$ docker-compose build
  • 次にコンテナを起動
$ docker-compose up
  • DBが作成されていないので作成します(ついでにmigrateも実行)
$ docker-compose run --rm app rake db:create db:migrate

これでブラウザからRailsプロジェクトの動作が確認できるはずです!!!

注意点

以上でDockerの環境はできましたが、自分で調べている際にハマったことがあります

Dockerのバージョンには気をつけること

日本語の記事はほとんど(自分が調べた限りでは)version2で書かれたものでした
なのでdocker-compose.ymlvolumes_fromextendsなどのコマンドが使えなかったのでハマって時間がかかりました。
まあバージョンの確認しなかった自分が悪いのですが...バージョン確認は基本なのにできていなかった...
あとはDockerに限らずですが、ちゃんと公式を見たほうがいいなと思いました

まとめ

一旦Railsプロジェクトを途中からDockerに載せる手順をずらっと書いてきました、自分自身Dockerに関してはまだまだ勉強中なので何か指摘があればコメントをお願いいたします:bow:

参考

https://qiita.com/togana/items/30b22fc39fe6f7a188ec かなり参考になりました:bow: