Windows10で構築
ruby 3.2.2
Rails 7.1.0
mysql 8.1.0
rubyのコンテナを作成してRails new を実行し、Railsアプリを作成する
Windowsにrubyをインストールしている場合はコンテナ不要で、コマンドプロンプトでrails newする
mkdir work
cd work
docker run -it -v .:/apl -w /apl --name ruby ruby:3.2.2
コンテナ生成時にrubyが実行されてコマンドが打てない。(rubyを終了するとコンテナも終了する)
コマンドプロンプトをもう一つ立ち上げ、このフォルダまで移動して次のコマンドを打つ
docker exec ruby gem install rails
docker exec ruby rails new RailsTest --database=mysql
アプリ名はRailsTest
作業フォルダにRailsアプリのフォルダが出現する
rubyコンテナとイメージはもう使用しないので削除
docker stop ruby
docker rm ruby
docker rmi ruby:3.2.2
Railsアプリのフォルダに入り、docker-compose.ymlを作成する
# RailsTest/docker-compose.yml
version: '3.9'
services:
db:
image: mysql:8.1.0
container_name: rails-db
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql
web:
build: .
container_name: rails-web
volumes:
- .:/rails
ports:
- 3000:3000
depends_on:
- db
volumes:
mysql_data:
Rails newの時にDockerfileが作成されているので、以下の部分を変更する
# RailsTest/Dockerfile
# 11行目
ENV RAILS_ENV="production"
BUNDLE_DEPLOYMENT="1" \
BUNDLE_PATH="/usr/local/bundle" \
BUNDLE_WITHOUT="development"
↓
ENV RAILS_ENV="development"
production環境は暗号化キーの設定などが必須で面倒なので変える
# RailsTest/Dockerfile
# 62行目
CMD ["./bin/rails", "server"]
↓
CMD ["./bin/rails", "server", "--binding", "0.0.0.0"]
ホストからルートされた通信を受け取れるように変更
# RailsTest/Dockerfile
# 55行目
USER rails:rails # 行ごと削除
ユーザー"rails"はdevelopment.logの書き込み権限がないのでアプリ起動時に落ちる
管理者ユーザーで実行するためにユーザーを指定しない
docker-compose.ymlの内容に合わせてデータベースの設定を行う
# RailsTest/config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # ココ
host: db # ココ
cd RailsTest
docker-compose up -d
初回起動時はデータベースの作成などがあるので起動するまで少し待つ
http://localhost:3000/
Rails 7.1.0の初期画面が表示される
MySQL Workbenchからアクセスできる
HostName : 127.0.0.1
Username : root
Port : 3306
Password : password
変更する場合はdocker-compose.ymlとdatabase.ymlを合わせる
以下メモ
docker exec -it rails-web bash
コンテナ名のrails-webはdocker-compose.ymlのcontainer_nameで定義している
モデル・コントローラーの生成やテーブル生成コマンドはwebコンテナの中で実行する
コンテナを再起動すると、コードの修正が反映される
コマンドプロンプトを立ち上げ、以下のコマンドでwebコンテナを再起動する
docker restart rails-web
webコンテナに入り、以下のコマンドでmigrationファイルを生成する
# usersテーブルを作成したい
./bin/rails g model user
RailsTest/db/migrateにファイルが作成される
このファイルにテーブルレイアウトを定義する
# RailsTest/db/migrate/20231008074315_create_users.rb
class CreateUsers < ActiveRecord::Migration[7.1]
def change
create_table :users do |t|
t.string :name
t.string :adress
t.integer :age
t.timestamps
end
end
end
webコンテナで以下のコマンドを実行するとusersテーブルが作成される
./bin/rails db:migrate