aws

【A-31】(高難易度)Dockerfile Ruby on Rails

Docker を使って Ruby on Rails 環境を構築する方法 を学びます。
Dockerfile を一行ずつ作成しながら学習 し、最終的に Rails アプリを起動できる状態にすることがゴールです。

[学習フェーズ]

Ruby on Rails を動かすために必要なもの

Ruby on Rails は Web アプリケーションを作るためのフレームワーク ですが、単体では動きません。
いくつかの 必須コンポーネント を組み合わせることで、初めて Rails アプリを動かすことができます。
以下の 4 つの要素を押さえておきましょう。


① Ruby

Ruby on Rails は Ruby というプログラミング言語で動作するため、まず Ruby が必要 です。
Rails の内部では、Web リクエストの処理やテンプレートエンジン、データベース操作などを Ruby のコードで記述します。

FROM ruby:3.2

② Node.js & Yarn

Rails は JavaScript も扱う ため、Node.jsYarn(パッケージマネージャー)が必要です。
特に、フロントエンドの JavaScript の処理や、Rails の アセットパイプライン(CSS や JS の管理)で使用されます。

RUN apt-get update && apt-get install -y nodejs npm && npm install -g yarn

Node.js が必要な理由

  • フロントエンドの JavaScript を Rails で動かすため
  • Rails 7 では importmap-rails などが Node.js に依存

Yarn が必要な理由

  • JavaScript のライブラリをインストール・管理するため

③ データベース

Web アプリでは、ユーザー情報や投稿データを保存するための データベース が必要です。
Rails では、主に以下のデータベースを使用します。

データベース特徴
SQLiteRails に標準搭載。小規模な開発向け
MySQL大規模アプリや AWS などのクラウド環境でよく使われる
PostgreSQLデータ分析やエンタープライズ向け

今回の環境では、SQLite を使うので --database=sqlite3 を指定して Rails プロジェクトを作成します。

docker run --rm -v "$(pwd):/app" -w /app my-rails-app rails new . --force --database=sqlite3

④ Gemfile & Gemfile.lock

Ruby on Rails では、プログラムの部品(ライブラリ)を Gem という形式で管理します。
どの Gem を使うかを記載するのが Gemfile
実際にインストールされたバージョンが Gemfile.lock に記録される という仕組みです。

Gemfile の例

source 'https://rubygems.org'
gem 'rails', '7.1'

Gemfile.lock の例

rails (7.1.0)
actioncable (= 7.1.0)
actionmailer (= 7.1.0)
activerecord (= 7.1.0)
...

[実践フェーズ]

ゼロからRuby on Rails用のdockerfileを作成してみましょう。dockerfileを作成するには、docker runコマンドで1行ずつ検証していくことが重要です。

まずは、ruby:3.2 の公式イメージを使って、Ruby の環境が動くか試してみます。

docker run --rm -it ruby:3.2 irb

🔹 ポイント

  • --rm → コンテナ終了時に削除
  • -it → 対話モード
  • ruby:3.2 → Ruby の公式イメージ
  • irb → Ruby の対話シェルを起動

無事にRubyの立ち上がりを確認できれば、dockerfileに追記していきます。

ここまでの Dockerfile を確認すると、以下のようになっているはずです。

FROM ruby:3.2

このように1つずつ検証し、dockerfileを作成してみてください。

概要手順は以下となります。

  1. Ruby をインストール
  2. Node.js と Yarn をインストール
  3. Rails をインストール Gemfile を作成し、必要なライブラリを定義
  4. bundle install で Gem をインストール
  5. Rails プロジェクトを作成
  6. volumeを作成
  7. rails db:setup でデータベースを初期化
  8. rails server でアプリを起動 (port 3000)
  9. コンテナとボリュームの削除(クリーンアップ)

以下のようなウェルカムページが表示されれば成功です。