目次
概要環境手順1. Dockerfileの作成2. docker-compose.ymlの作成3. データベース設定の更新4. アプリケーションの構築と起動5. データベースの作成とマイグレーションまとめ
概要
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アプリケーションをコンテナ化することで、以下のメリットがあります:
- 環境の一貫性:全ての開発者が同じ環境で作業できます。
- 簡単なセットアップ:新しいマシンでも
docker-compose up
だけで環境を構築できます。 - 本番環境との類似性:開発環境と本番環境の差異を最小限に抑えられます。
DockerとDocker Composeを使いこなすことで、より効率的なRails開発が可能になります。ぜひ試してみてください!