Railsマイグレーションでdocker内のmysqlコンテナにテーブルを作成する

Ruby

docker内のmysqlコンテナにマイグレーションでテーブルを構築する方法を記事にしました。

この記事は、前回投稿した記事の続きになります。

Ruby on Rails(Rails+MySQL)をdockerで動かしてみる
最近、触り始めているRubyonRailsをdocker,awsと合わせて勉強していきたいと思っている今日この頃でございます。まず今回は、railsをdocker環境で動かすための、docker+rails環境構築を記事にしていきます。 ...

前回のdocker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
     
    ports:
      - "3306:3306"
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
    - .:/myapp
    ports:
    - "3000:3000"
    links:
    - db

config/database.ymlの編集

マイグレーションでdocker内のmysqlコンテナにテーブルを作成するためには、アプリケーション側にdocker内のmysqlコンテナを指定する必要があります。

config/database.yml を docker-compose.ymlのmysql情報に合わせる

default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: root
host: db
port: 3306

マイグレーションを実行

コンテナ起動する

今回も、rails_dockerをプロジェクト名の前提です

$ cd rails_docker
$ docker-compose up -d
Starting rails_docker_db_1 ... done
Starting rails_docker_web_1 ... done

webコンテナ内でマイグレーション実行

//コンテナ入る
$ docker exec -it rails_app_docker_web_1 bash
$ bin/rails db:create db:migrate

dbに入ってMySQLを確認する

$ docker exec -it rails_docker_db_1 bash
root@xxxxxxxxx:/# mysql -u root -p
Enter password: root

webコンテナから接続する場合

hostとportを指定して接続する

root@xxxxxxxxx:/# mysql -h db -P 3306 -u root -p

IP直指定でも入れる

root@xxxxxxxxx:/# mysql -h 172.17.0.2 -P 3306 -u root -p

※ dbコンテナ内でhostname -iコマンドで調べられる

コメント