RailsのDBをSQLiteからMariaDBに変更
Posted May 03, 2018 | Updated Dec 23, 2023
変更概要
本番環境はMySQLを使っているのですが、開発用にDBサーバを構築するのが億劫だったので、SQLite3で騙し騙しやってきました。本番用に作成したマイグレーションファイルがSQLiteで動かないこともあり、ThinkPadのOSを入れ替えるついでにMariaDBに乗り換えてみることにしました。
SQLiteはデータファイルさえ用意してあげれば使える簡易なDBですが、MariaDBはサーバとして動かす必要があり、APサーバ用のコンテナとは別にDBサーバ用のコンテナを用意して上げる必要があります。
手順
1. 仮想ネットワーク(rails_net)を作成
まずは、APサーバのコンテナとDBサーバのコンテナをつなぐ「仮想Bridgeネットワーク」を作成します。今回は「rails_net」という名前をつけておきます。名前はわかりやすくしておけば良いかと。
コマンド:sudo docker network create rails_net
3. DBサーバのコンテナ(mariadb)を起動
次にDBサーバコンテナを起動します。
コマンド:
sudo docker run
--name mariadb
-e MYSQL_ROOT_PASSWORD=mariadb
--net rails_net
-d mariadb:latest
今回は、手軽さと再現性を考えて、以下の前提で起動しています。
- コンテナイメージはDockerの公式イメージを利用
- 開発環境のためデータの永続化はしていない
- 開発環境のためユーザーはrootを利用
APサーバからコンテナ名でDB接続できるように、1.で作成した仮想ネットワーク「rails_net」につないだ状態で起動します。オプション--net
で1.で作成した仮想Bridgeネットワークの名前「rails_net」を指定します。こうすることでコンテナ同士のIPをコンテナ名で解決できるようになります。
DBサーバコンテナの名称は--name
で指定している「mariadb」です。
3. APサーバのコンテナ(ap)を起動
APサーバのコンテナには、Railsが入った既存のコンテナイメージを利用します。
コマンド:
sudo docker run -it
--expose=3000 -p 3000:3000
--name rails_ap
-v /home/user/rails:/usr/rails
--net rails_net
myrepo/rails:4.2.3
/bin/bash
railsにアクセスできるようコンテナの3000番ポートを開放して(--expose
オプション)、コンテナの3000番ポートとホストOS(ubuntu18.04)のポートに紐付けます(-p
オプション)。そして、DBサーバにアクセスできるよう、仮想ネットワーク「rails_net」につなぎます(--net
オプション)。
-v
オプションでホストOSのディレクトリをコンテナのディレクトリにマウントしています。
4. WEBアプリの起動
最後にAPサーバに入ってアプリを起動します。
railsのDB設定は、mysqlを使うときと同じ設定にします。hostにDBサーバコンテナの名前「mariadb」を指定します。Dockerの仮想ネットワークで名前解決され、DBサーバコンテナに接続できます。
development:
adapter: mysql2 # MariaDBはMySQL互換なので本番同等。
encoding: utf8 # 文字コード。UTF-8で。
pool: 5 # 本番に合わせた。
host: mariadb # --nameで指定した名前。
port: 3306 # 特に変更しなければ標準ポート。
username: root # 特に変更しなければroot。
password: mariadb # -e MYSQL_ROOT_PASSWORD=で指定したパスワード。
database: rails # DB名称なので、WEBのアプリ名前とかなんでも。
DBの接続設定ができたら、DBを初期化して、WEBアプリを起動します。
cd /usr/rails # railsのディレクトリに移動
rake db:create # DB作成
rake db:migrate # テーブル作成
bundle exec rails s -b 0.0.0.0 # WEBアプリの起動
これで実行環境(development)のできあがり。
さいごに
今回、RrailsのDBをSQLite3からMariaDBに切り替えてみました。本番環境であれば、もう少し考慮が必要なのかもしれませんが、開発環境ということもあり標準設定をそのまま使って、簡単に切り替えることができました。
そもそも私のようにRailsでSQLite3を使う人は少なそうですが、切り替える際の参考になれば幸いです。こういったメモは再度やるときの手順としても使えて便利ですね。
Twitterやってます。@Mockun_JPN