【Laravel】Laradockを使い最速で簡単に環境構築【補足】#1データベースに接続

  • 2020.02.24
  • Web
【Laravel】Laradockを使い最速で簡単に環境構築【補足】#1データベースに接続

今回は、Laravel環境構築シリーズの補足になります。

Webアプリの開発にはデータベースが欠かせません。

Laravel環境構築シリーズで構築したLaravelの環境にデータベース管理システムのMySQLをインストールして、接続してみたいと思います。

↓↓↓Laravel環境構築シリーズの記事一覧はこちらから ↓↓↓

これからやること

・データベース設定
・MySQLコンテナの起動
・phpMyAdminコンテナの起動
・マイグレーション

現在のフォルダ構成は以下のとおりです。

project-folderフォルダにgit cloneしたlaradockフォルダとLaravelを格納しているlaravelフォルダがあるとします。

project-folder
 └── laradock
 └── laravel

データベース設定

データベースに接続するため、Laravelフォルダにある.envファイルを設定します。.envファイルの9~14行目周辺を以下のように編集します。

project-folder
└── laradock
└── laravel
       └── .env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

ここでは、MySQLにデフォルトで用意されている「default」ユーザに接続できるようにしています。

次にMySQLのバージョンを設定をします。デフォルトでは、最新版をインストールするように設定されていますが、MySQLの8.0から認証方式が変更されたみたいです。

参考記事

MySQL8.0 認証方式を変更する(Laravel5)

https://qiita.com/ucan-lab/items/3ae911b7e13287a5b917

そのため、今回はMySQL5.7にバージョンを落としてインストールします。Laradockフォルダにある.envファイルの284行目周辺のMySQLのバージョンを5.7にします。

project-folder
└── laradock
       └── .env
└── laravel
### MYSQL #################################################

MYSQL_VERSION=5.7

MySQLコンテナの起動

MySQLとはデータベース管理システムのひとつです。

参考記事

【初心者向け】データベースとは何か? わかりやすく簡単に意味を図解

https://26gram.com/what-is-database

Laradockフォルダにある「docker-compose.yml」の412行目周辺にあるMySQLの項目に「command: –innodb-use-native-aio=0」を追加します。

project-folder
└── laradock
       └── docker-compose.yml
└── laravel
### MySQL ################################################
・
・
・
中略
・
・
・
command: --innodb-use-native-aio=0

参考記事

dockerのMySQLコンテナでなぜ”command: –innodb-use-native-aio=0″が必要な環境があるのか

https://cpoint-lab.co.jp/article/201911/12852/

余談ですが、僕はMySQLコンテナを起動させたところ、一向に立ち上がらなくて、原因がわからずこのコマンドが必要だということに2、3日もの時間がかかってしまいました。悲

環境構築をするときにこういうことはよくありますよね笑

laradockフォルダに移動して、下記のコマンドを叩いて、MySQLのコンテナを起動させます。

そのあと、コンテナの起動確認を行います。「State」の欄が「Up」になっていれば、OKです。

$ pwd
/c/Users/ユーザ名/Desktop/project-folder/laradock

$ docker-compose up -d nginx mysql

$ docker-compose ps
 Name                          Command               State                                  Ports
-------------------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp, 2376/tcp
laradock_mysql_1              docker-entrypoint.sh --inn ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8080->8080/tcp

phpMyAdminコンテナの起動

Laradockの中には、なんと便利なことにWebブラウザからMySQLを管理できるツールであるphpMyAdminコンテナが入っています。

デフォルトでは、phpMyAdminは8080ポートが設定されています。しかし、8080ポートは他に起動しているコンテナでも使われているため、ポートを変更したいと思います。

Laradockフォルダの.envファイル393行目周辺のPMA_PORTを8080から9000にしようと思います。

project-folder
└── laradock
       └── .env
└── laravel
### PHP MY ADMIN ##########################################
・
・
・
中略
・
・
・
PMA_PORT=9000

では、phpMyAdminコンテナを起動させましょう。

$ docker-compose up -d phpmyadmin

$ docker-compose ps

           Name                          Command               State                                  Ports
-------------------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp, 2376/tcp
laradock_mysql_1              docker-entrypoint.sh --inn ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp
laradock_phpmyadmin_1         /docker-entrypoint.sh apac ...   Up      0.0.0.0:9000->80/tcp
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp, 0.0.0.0:8080->8080/tcp

ブラウザのアドレス欄に「http://192.168.99.100:9000」を入力して、下記のページが表示されたら、OKです。

ちなみに、デフォルトでは下記の情報でphpMyAdminにログインできます。

・defaultのデータベースのみ操作可能
サーバ:mysql
ユーザ名:default
パスワード:secret

・全てのデータベースを操作可能
サーバ:mysql
ユーザ名:root
パスワード:root

GUIでデータベースを管理するのはではなく、SQLコマンドで管理したい方は、MySQLコンテナの中に入って、操作します。

$ pwd
/project-folder/laradock

$ docker-compose exec mysql bash

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 119
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

マイグレーション

マイグレーションとは、Laravelからデータベース内にテーブルを作成することができる機能です。

Laravelにはデフォルトで以下のマイグレーションファイルが存在しています。

Artisan(アルチザン)コマンドで、これらのマイグレーションファイルからデータベースにテーブルを作成します。

データベースにテーブルが作成されていたら、データベースに接続できたとします。

参考記事

【Laravel】わりとよく使うArtisanコマンド集

https://qiita.com/sola-msr/items/a09b857c5e7f7c88d01d

Artisan(アルチザン)コマンドを使うためには、workspaceコンテナに入る必要があります。

$ pwd
/project-folder/laradock

$ docker-compose exec workspace bash

/var/www#

以下のコマンドで、マイグレーションすることができます。

# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.02 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)

phpMyAdminにログインしてみて、defaultに下記のテーブルが作成されていたら、成功です。

まとめ

これで、Laravelからデータベースに接続できるようになりました。

クライアントPCのWebブラウザから取得したデータをもとにデータベースに問い合わせて、データを取得する。

取得したデータをクライアントPCのWebブラウザに表示させるといった動きのできるWebアプリを開発する準備が整いました。

今回は以上です。

それでは。