blog.kotamiyake.me

為せば成る、為さねば成らぬ何事も

Dockerを使って好きなバージョンのMySQLで開発を進める方法を紹介したいと思います。

Dockerのインストール

DockerとDocker Composeをインストールして下さい。Macを利用している方は以下のリンクからインストールして下さい。

Docker For Mac | Docker

これでDockerとDocker Composeが利用できるようになります。

docker-compose.ymlの準備

次にdocker-compose.ymlを準備します。

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
      - ./docker/mysql:/etc/mysql/conf.d
    ports:
      - "3307:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: railsdevroot
      MYSQL_USER: railsdev
      MYSQL_PASSWORD: railsdev
volumes:
  db_data:

プロジェクトと紐づくようにRailsのルートフォルダにファイルを作成して下さい。

細かい設定の意味については下記のドキュメントを参考にして下さい。

Compose file version 3 reference | Docker Documentation

volumes:
  - db_data:/var/lib/mysql
  - ./docker/mysql:/etc/mysql/conf.d

MySQLは/etc/mysql/conf.dに*.cnfというファイルが存在するとそちらを設定ファイルとして読み込んでくれるので、個別に設定が必要な場合は独自にファイルを用意してvolumnsセクションでパスを設定します。

今回はDocker用の設定ファイルということで便宜上docker/mysql/というフォルダを作ってそこに設定ファイルを作り読み込むようにしています。

こちらは各プロジェクトに合わせてて適宜読み替えて下さい。

Rails側の設定

あとはRailsのdatabase.ymlで接続先を設定するだけです。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: sample_development
  port: 3307
  password: railsdevroot
  host: 127.0.0.1

気をつける箇所はhostを設定していないとホスト側のDBへ繋ごうとするので忘れずに指定する必要があります。

これで複数のプロジェクトで異なるバージョンのMySQLを使用していても、互いに影響することなく開発を進めることができます。

皆さんもぜひ試して下さい。