このページで解説している内容は、以下の 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」ファイルの定義を解説します。
サービス名 | 意味 | 解説 |
---|---|---|
db | MariaDBのサービスを定義する | MariaDBのコンテナを起動し、イメージはmariadb:10.8を使用します。 |
コンテナの名前はmariadb_containerです。 | ||
環境変数MARIADB_ROOT_PASSWORDには”testpass”が設定されています。 | ||
ボリュームdb-data:/var/lib/mysqlがマウントされます。 | ||
web | Railsアプリケーションのサービスを定義する | カレントディレクトリのDockerfileを使用して、Railsアプリケーションのコンテナをビルドします。 |
コンテナの名前はrails_containerです。 | ||
このサービスはdbに依存しており、dbが起動していることを前提としています。 | ||
環境変数DATABASE_PASSWORDには”testpass”が設定されています。 | ||
ホストの3000ポートとコンテナの3000ポートがマッピングされます。 | ||
カレントディレクトリが/samplerailsにマウントされます。 | ||
volumes | ボリュームを定義する | ボリュームdb-dataを定義します。 |
この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 run | Docker Composeのサブコマンドで、指定されたサービス内でコマンドを実行する。 |
–rm | コマンドが完了した後にコンテナを削除する。 |
web | 実行するコンテナ内のサービス名またはサービス定義。 |
rails new . | カレントディレクトリに新しいRailsプロジェクトを作成する。 |
–force | 既にRailsプロジェクトが存在する場合でも強制的に上書きする。 |
–no-deps | 依存関係のコンテナを起動せずに、指定されたサービスのみを実行する。 |
–database=mysql | MySQLをデータベースとして使用するようにRailsプロジェクトを設定する。 |
このコマンドを実行すると、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コンテナを起動させます。