このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】Ruby on Railsコンテナ②

Ruby on Railsコンテナ①」の続きです。引き続き、Railsコンテナを構築していきます。

「Ruby on Railsコンテナ」は次の3部に分けて解説していきます。

 ここでは、「compose.yaml」ファイルの作成とRailsプロジェクトを作成していきます。

「compose.yaml」ファイルの作成

VSCodeで「compose.yaml」ファイルを作成します。

「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\rails> code compose.yaml

VSCodeが起動します。

「compose.yaml」ファイルを以下のように編集して保存します。

services:
  db:
    image: mariadb:10.8
    container_name: mariadb_container    
    environment:
      MARIADB_ROOT_PASSWORD: testpass
    volumes:
      - db-data:/var/lib/mysql
  web:
    build: .
    container_name: rails_container    
    depends_on:
      - db
    environment:
      DATABASE_PASSWORD: testpass
    ports:
      - "3000:3000"
    volumes:
      - .:/samplerails
volumes:
  db-data:

定義内容の解説

「compose.yaml」ファイルの定義を解説します。

サービス名意味解説
dbMariaDBのサービスを定義するMariaDBのコンテナを起動し、イメージはmariadb:10.8を使用します。
コンテナの名前はmariadb_containerです。
環境変数MARIADB_ROOT_PASSWORDには”testpass”が設定されています。
ボリュームdb-data:/var/lib/mysqlがマウントされます。
webRailsアプリケーションのサービスを定義するカレントディレクトリのDockerfileを使用して、Railsアプリケーションのコンテナをビルドします。
コンテナの名前はrails_containerです。
このサービスはdbに依存しており、dbが起動していることを前提としています。
環境変数DATABASE_PASSWORDには”testpass”が設定されています。
ホストの3000ポートとコンテナの3000ポートがマッピングされます。
カレントディレクトリが/samplerailsにマウントされます。
volumesボリュームを定義するボリュームdb-dataを定義します。
「compose.yaml」ファイルの定義

 このcompose.yamlは、MariaDBとRailsアプリケーションの2つのサービスを定義し、それぞれのコンテナの設定を指定しています。RailsアプリケーションはMariaDBに依存しており、マウントされるボリュームや環境変数など、両方のサービスの間で情報が共有されています。

Railsプロジェクトの作成

Railsコンテナを作成するには、Railsプロジェクトを作成しておく必要があります。

 「docker compose run」コマンドを使って、Railsプロジェクトを作成します。Railsプロジェクトを作成するとプロジェクトを構成するファイルが作成されるので、データベースを設定する「database.yml」を編集して、コンテナを作り直します。その際、Railsプロジェクトを作成するために作成したコンテナは削除しておきます。

Railsプロジェクトを作成するために、次のコマンドを実行します。

docker compose run --rm web rails new . --force --no-deps --database=mysql

コマンドの解説

 このコマンドは、Docker Composeを使用してRailsアプリケーションの新しいプロジェクトを作成します。各部分を説明します。

以下は、コマンドの内容を表にまとめたものです。

項目意味
コマンドdocker compose run –rm web rails new . –force –no-deps –database=mysql
docker compose runDocker Composeのサブコマンドで、指定されたサービス内でコマンドを実行する。
–rmコマンドが完了した後にコンテナを削除する。
web実行するコンテナ内のサービス名またはサービス定義。
rails new .カレントディレクトリに新しいRailsプロジェクトを作成する。
–force既にRailsプロジェクトが存在する場合でも強制的に上書きする。
–no-deps依存関係のコンテナを起動せずに、指定されたサービスのみを実行する。
–database=mysqlMySQLをデータベースとして使用するようにRailsプロジェクトを設定する。
docker compose runコマンド

 このコマンドを実行すると、Railsプロジェクトが新規に作成され、カレントディレクトリに配置されます。作成されるプロジェクトはMariaDBをデータベースとして使用し、依存関係のコンテナを起動せずに、一時的なコンテナ内で実行されます。操作が完了すると、一時的なコンテナは自動的に削除されます。

docker compose run --rm rails rails new . --force --no-deps --database=mysql」コマンドを実行します。

コマンドの実行には、少々時間がかかります。

PS C:\Users\joeac\Desktop\docker\rails> docker compose run --rm web rails new . --force --no-deps --database=mysqldocker
 compose run --rm rails rails new . --force --no-deps --database=mysql
[+] Running 9/9
 ✔ db Pulled                                                                                                       9.5s
   ✔ d1669123f281 Pull complete                                                                                    1.6s
   ✔ 7942299fe584 Pull complete                                                                                    0.9s
   ✔ ca116927bbe1 Pull complete                                                                                    1.1s
   ✔ 9c0f0b5293ed Pull complete                                                                                    1.7s
   ✔ ee0988afd61a Pull complete                                                                                    2.0s
   ✔ 82d81fccd49d Pull complete                                                                                    4.0s
   ✔ 7e361405ea73 Pull complete                                                                                    2.6s
   ✔ be365127aa3f Pull complete                                                                                    2.9s
[+] Creating 3/3
 ✔ Network rails_default        Created                                                                            0.0s
 ✔ Volume "rails_db-data"       Created                                                                            0.0s
 ✔ Container mariadb_container  Created                                                                            0.3s
[+] Running 1/1
 ✔ Container mariadb_container  Started                                                                            0.2s
2024/04/21 21:47:18 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 68.3s (13/13) FINISHED                                                                      docker:default
 => [web internal] load build definition from Dockerfile                                                           0.0s
 => => transferring dockerfile: 327B                                                                               0.0s

(省略)

[4/4] Building fresh packages...
success Saved lockfile.
success Saved 572 new dependencies.
info Direct dependencies
├─ @rails/actioncable@6.1.7

(省略)

├─ yargs@13.3.2
└─ yocto-queue@0.1.0
Done in 130.60s.
Installing webpack and webpack-cli as direct dependencies
         run  yarn add webpack@^4.46.0 webpack-cli@^3.3.12 from "."
yarn add v1.22.22
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved 0 new dependencies.
Done in 107.57s.
Installing dev server for live reloading
         run  yarn add --dev webpack-dev-server@^3 from "."
yarn add v1.22.22
[1/4] Resolving packages...
warning webpack-dev-server > webpack-log > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 107 new dependencies.
info Direct dependencies
└─ webpack-dev-server@3.11.3

(省略)

├─ websocket-extensions@0.1.4
└─ ws@6.2.2
Done in 121.80s.
Webpacker successfully installed 🎉 🍰
PS C:\Users\joeac\Desktop\docker\rails>

「docker compose stop」コマンドを実行します。

起動しているMariaDBコンテナを停止させます。

PS C:\Users\joeac\Desktop\docker\rails> docker compose stop
[+] Stopping 1/1
 ✔ Container mariadb_container  Stopped

Railsプロジェクト

Railsのプロジェクトが作成されていることを確認します。

「rails」フォルダの中身を確認します。


 この続きは「Ruby on Railsコンテナ③」で、イメージを再ビルドして、設定ファイルを編集してRailsコンテナを起動させます。

関連コンテンツ