くまがいブログ

エンジニアに目指す社会人

railsアプリをDockerとDocker Composeを使ってコンテナ化する方法

目次

概要


RailsアプリケーションをDockerとDocker Composeを使用してコンテナ化する方法について説明します。この方法を使えば、開発環境の構築が簡単になり、チーム間での環境の統一も容易になります。

環境


Docker Desktop
Docker Compose

以上がインストールされているPC

筆者の環境はMacでの実行

手順


1. Dockerfileの作成

まず、プロジェクトのルートディレクトリにDockerfileを作成します。

FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

COPY . /myapp

EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

このDockerfileは以下のことを行います:

  • Ruby 3.2.2のイメージを使用
  • 必要なパッケージをインストール
  • アプリケーションのディレクトリを作成
  • Gemfileをコピーして依存関係をインストール
  • アプリケーションのコードをコピー
  • ポート3000を公開
  • Railsサーバーを起動するコマンドを設定

2. docker-compose.ymlの作成

次に、docker-compose.ymlファイルを作成します。

version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

このファイルは以下のことを定義します:

  • PostgreSQLデータベースサービス
  • Railsアプリケーションのwebサービス
  • ボリュームとポートのマッピング
  • サービス間の依存関係

3. データベース設定の更新

config/database.ymlファイルを更新して、Dockerコンテナ内のPostgreSQLに接続するように設定します。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

4. アプリケーションの構築と起動

以下のコマンドを実行して、Dockerイメージをビルドし、コンテナを起動します。

docker-compose build
docker-compose up

5. データベースの作成とマイグレーション

別のターミナルウィンドウで以下のコマンドを実行し、データベースを作成してマイグレーションを実行します。

docker-compose run web rails db:create
docker-compose run web rails db:migrate

これで、RailsアプリケーションがDockerコンテナ内で動作するようになりました!ブラウザでhttp://localhost:3000にアクセスして、アプリケーションが正常に動作していることを確認してください。

まとめ


DockerとDocker Composeを使用してRailsアプリケーションをコンテナ化することで、以下のメリットがあります:

  1. 環境の一貫性:全ての開発者が同じ環境で作業できます。
  2. 簡単なセットアップ:新しいマシンでもdocker-compose upだけで環境を構築できます。
  3. 本番環境との類似性:開発環境と本番環境の差異を最小限に抑えられます。

DockerとDocker Composeを使いこなすことで、より効率的なRails開発が可能になります。ぜひ試してみてください!