‹ Mockun Note

RailsのDBをSQLiteからMariaDBに変更

Posted May 03, 2018 | Updated Dec 23, 2023

変更概要

本番環境はMySQLを使っているのですが、開発用にDBサーバを構築するのが億劫だったので、SQLite3で騙し騙しやってきました。本番用に作成したマイグレーションファイルがSQLiteで動かないこともあり、ThinkPadのOSを入れ替えるついでにMariaDBに乗り換えてみることにしました。

RailのDBをSQLiteから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

🏷