0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

③Docker MYSQLにデモデータ(seed_fu)を投入する(2020.4時点)

Last updated at Posted at 2020-04-14

#1.これからDocker導入します、という方は、まず、こちらを見ていただけると幸いです。

①Dockerを初めて導入して基本操作する (2020.4時点)

##前回までのおさらい 

②Dockerを初めて導入してRails sする (2020.4時点)

当方、デモデータの投入についてはdb:seed_fuを使用しして開発しております。
Docker環境においてもMYSQLイメージ内にdb:seed_fuでデモデータを投入する作業を進めます。

#2.前提
Docker for Macアプリをインストールしている
Dockerサービスが起動している
DockerHubでサインインしている
VSCodeで編集
ターミナル使用
Sequelpro使用(なくてもなんとかなります)

<環境>
macOS : Catalina 10.15.3
Docker version : 19.03.8
ruby : 2.5.1
Rails : 5.2.4.1
MYSQL :5.6

#3.DockerコンテナのMYSQLイメージが稼働しているか確認する

”docker-compose up している状態”を保持しつつ、
別ウインドウで新しいターミナルを開いて ローカルのアプリディレクトリに移動(cd)します
(アプリファイルを置いている場所はみなさん違いますので参考です)

ターミナル
 % cd nomadcafe  

Docker ps で起動しているコンテナを調べます。

ターミナル
docker ps

するとこんな感じになります。
image.png
webコンテナとdbコンテナ両方とも STATUS ”Up” になっています。

Dockerのdbコンテナの中に入っていきます。

ターミナル
docker exec -i -t [コンテナID] bash  (カッコは要りません)

dbコンテナのIDを入力します。

ターミナル
 docker exec -i -t ed494a77942a bash

root@ed494a77942a:/# ←これが出てきたら、dbコンテナに入った状態です。

MYSQLにアクセスします。

ターミナル
mysql -u root -p

MYSQLの中のデータベースを一覧表示します。

ターミナル
mysql> show databases;

こんな感じです。
image.png
Mysqlやアプリのdevelopmentやtestがありました!

データベースのうち、nomadcafe_development にアクセスします。

ターミナル
mysql> use nomadcafe_development

Database changed が出ればOKです。

nomadcafe_development のテーブルを一覧表示します。

ターミナル
mysql> SHOW TABLES;

こんな感じです。
image.png
Docker MYSQLイメージにマイグレーションしたテーブルがちゃんと存在していました!

#4.Docker環境で、Railsコマンド「rake db:seed_fu」でデモデータを投入する

当方のアプリは、多めのデモデータを投入しておく必要があり「db:seed_fu」を使用しています。

docker-compose.yml にrailsコマンド実行を記述します。

docker-compose.yml
    command: bash -c "bundle exec rake db:seed_fu && /bin/bash"

このへんに書いておきます。(rails sより下に書いたらうまくいきませんでした。)
image.png
この方法が妥当かどうか、正直、理解度が足りずわかりませんが、後々わかれば是正してきます。

docker-compose up --build します。

ターミナル
docker-compose up --build            

localhost:3000にアクセスします。
image.png
無事、each文のボタン表示、dbデータ取得表示ができています。
Showページのdbデータ取得表示もできています。
image.png

#5.コンテナのMYSQLにデモデータ投入ができているか確認する

ブラウザでできていることは分かったのですが、念のためdbコンテナのMYSQLを確認します。

ターミナル
docker ps

コンテナIDを調べます。dbコンテナは 794f16c1d24d になります。
image.png
dbコンテナに入ります。

ターミナル
docker exec -it 794f16c1d24d bash

dbコンテナのMYSQLにアクセスします。

ターミナル
mysql -u root -p

こんな感じです。
image.png
データベースを一覧表示します。

ターミナル
mysql> show databases;

image.png
アプリ”nomadcafe_development”のデータベースにアクセスします。

ターミナル
mysql> use nomadcafe_development

Database changed が出たらOKです。

テーブルを一覧表示します。

ターミナル
mysql> SHOW TABLES;

こんな感じです。
image.png

shopsテーブルの中を確認します。

ターミナル
mysql> SELECT * FROM shops;  

image.png
無事、shopテーブルにデモデータが投入されていました!

ですが、日本語が?で表示されてわからない状態になっています。(汗)
ブラウザでは問題なかったので、MYSQL表示の設定ではないかと思われます。

#6.DockerのMYSQLイメージを日本語化する

DockerのMYSQL設定を確認します。

ターミナル
mysql> status

こんな感じです。
image.png
latin1とあります、utf8に変えて日本語設定します。

###ローカルで「my.cof」ファイルを新規作成し日本語設定の記述をします。

my.conf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[client]
default-character-set=utf8

こんな感じです。
image.png
続いて、docker-compose.ymlファイルの、db、volumesを編集します。

ローカルのmy.cnfファイルを DockerのMYSQLイメージの /etc/mysql/conf.d/my.cnfディレクトにマウント(同期)します、という記述です。

docker-compose.yml

  db:
    image: mysql:5.6
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf    ←追記します

こんな感じです。
image.png
改めて、起動します。

ターミナル
docker-compose up --build

dbコンテナのMYSQLに入り、データベースのテーブルを確認します。
(同じ手順ですのでコマンドのみ書きます)

ターミナル
docker ps

docker exec -i -t CONTAINER ID bash

 mysql -u root -p

use nomadcafe_development

 SELECT * FROM shops;   

無事、日本語表示が成功しました!
image.png

ちなみに、
SequelProでDockerコンテナのMYSQLイメージに接続すると、簡単にテーブルを確認したり操作できます!
image.png

#7.SequelProでDocker MYSQLイメージに接続する

Docker-compose.ymlファイルの設定を見ておきます。
image.png

SequelProを開きアクセスするための入力をします。
・ホストは 「127.0.0.1」 にします
・ユーザー名は 「root」 にしています
・パスワードは 「Docker-compose.ymlで書いたパスワード 」 です
・ポートは 「4306 Docker-compose.ymlで書いた 左側のポート番号」 です

こんな感じです。
image.png
すると、このようにデータベースにアクセスできます!
image.png

#8.参考になった記事一覧です。(ありがとうございす!)
【MySQL, SQL】データベースを扱う基本SQL一覧https://qiita.com/knife0125/items/bb095a85d1a5d3c8f706
コマンドはdocker-compose.ymlとDockerfileのどちらで定義するほうがいい?
docker-compose.ymlの書き方について解説してみたhttps://qiita.com/yuta-ushijima/items/d3d98177e1b28f736f04
【Rails seedsでdocker起動時に初期データを登録する 。データの重複はfirst_or_createで防ぐ】https://qiita.com/clbcl226/items/a6efd9035e0141251cf1
【Docker】Dockerでホストのディレクトリをマウントするhttps://qiita.com/Yarimizu14/items/52f4859027165a805630
Dockerで立ち上げたMySQLにログインすると日本語が文字化けhttps://qiita.com/luccafort/items/0553c589dcc6459746bc
DockerのMySQLコンテナにSequelProで接続するhttps://qiita.com/y_u_y_a/items/f30019316a1bd738437c

#9.最後に
当方、
実務未経験+初学者+テッ○キャンプ卒業+転職活動中であります。
もし、間違い等ございましたらご教示いただけるとありがたいです。

たくさんの先輩方のQiita記事でコードを見合わせできたり、エラー解決記事があったおかげで、ここまで実装できました。
記事を投稿してくださった先輩方に感謝しております。

この先も本番環境でのdocker実装に向けて進みつつ、わかりやすい記事を寄稿していきたいと考えています

##ローカル・Dockerで開発環境を整えるまでの続編
④ローカルDocker環境でデータ永続化、entrypointでseed_fuをやり直しする(2020.4.時点)
⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)
こちらも続けて見ていただけると流れがわかると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?