DockerでRuby on Railsの環境構築をする方法
Dockerを使ってRuby on Railsの環境構築を試してみる機会があり、備忘録としてブログにまとめてみました。データベースはPostgresql version 12を使います。
なお、今回はGitHubからGit cloneしたリポジトリを元に編集しています。同じ方法で試したいけどGitHubの使い方が分からない場合は検索してみてください。
Ruby on Railsとpostgresqlについては知識がなくても大丈夫です。
環境変数のパスワードは個人で使うのでpostgresにしていますが他の人に見える場所なので個人使用でない方は注意しましょう。
Dockerの操作
vscodeでローカルにクローンしたリポジトリを開きその中に新規ファイル作成でDockerfileを作成します。中身を以下のように記入します。
FROM ruby:3.2.2 RUN apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* \ postgresql-client \ && rm -rf /var/lib/apt/lists/* \ build-essential libpq-dev nodejs WORKDIR /リポジトリ名 COPY Gemfile Gemfile.lock /リポジトリ名/ RUN bundle install ADD . /リポジトリ名
リポジトリ内に新規ファイル作成でdocker-compose.yml作成。中身を記入します。
version: '3' services: db: container_name: リポジトリ名-db image: postgres:12 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - type: volume source: リポジトリ名-db-volume target: /var/lib/postgresql/data web: build: context: . command: bundle exec rails s -p 3000 -b '0.0.0.0' environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - type: bind source: . target: /myapp ports: - "3000:3000" depends_on: - db volumes: リポジトリ名-db-volume:
rails-docker>config>database.ymlを編集します。
Windowsの場合Ctrl+pの後database.ymlと入力すればファイルの検索欄に表示されます。
default: &default adapter: postgresql encoding: unicode host: db username: <%= ENV['POSTGRES_USER'] %> password: <%= ENV['POSTGRES_PASSWORD'] %> port: 5432
Gemfile、Gemfile.lockの内容を念のため確認。使いたいバージョンになっているかなどを見ておきます。
全て終わったら
docker-compose build
でdocker imageを作成
docker-compose up -d
でコンテナ作成とバックグラウンドでコンテナ起動
docker-compose exec web bash
でコンテナに入る
rails db:create
DBを作る
myapp_development
myapp_test
ができたと表示される
rails db:mimgrate
DBの更新
ブラウザでhttp://localhost:3000/ へ接続するとページが表示されているはずです。
止めたいときは Ctrl+cでコンテナから出ます。
Docker DesktopでコンテナをstopしExitedになったのを確認します
ターミナルでdocker ps
してコンテナが停止(Exited)したか確認します
エラーが出るときは?
今回私が遭遇したエラー内容を自戒を込めて書いていきます。
service "db" refers to undefined volume rals-docker-db-volume: invalid compose project
この場合docker-compose.ymlのvolume rals-docker-db-volumeに何かあるということです。
よく見てみるとrails-docker-db-volumeとすべきところを
rals-docker-db-volumeこのように書いていました。
他にもdocker-compose buildするときにエラーが起こりました。この時はDockerfile内のスペルミスやスペースがないなどでした。少しでも違うと進まなくなるのでエラー箇所をよく見てみましょう。
最後までご覧いただきありがとうございます!ご指摘などありましたらコメントいただけると嬉しいです。