メモ > サーバ > 各論: Docker > Laradockによる開発環境構築
Laradockによる開発環境構築
Homesteadは必要なものが揃った開発環境だが、実運用ではこんな多機能なサーバを用意することはまず無い
本番環境に近づけた開発環境を用意できるように、Docker用の環境が提供された
Laradockを使ってLaravel 5.5環境を構築する - Qiita
https://qiita.com/rock619/items/62c2ab2252c405e26479
Laravel使った開発にLaradockを使うというのはどうだろう - Qiita
https://qiita.com/niisan-tokyo/items/d4485b8bb4fbfcfcc6be
■前提
・docker/laravel を作業ディレクトリとする(ここが共有ディレクトリとして設定される)
・docker/laravel/laradock にLaradockをインストールするものとする
・docker/laravel/blog にプロジェクトをインストールするものとする(複数プロジェクトがあれば、同階層に作成する)
・MySQLはデフォルトで8が使用されるが、セキュリティが強化されて扱いづらいので5.7に変更して使用する
【Docker】MySQL8.0系を使う時に発生する問題について - websandbag ブログ
http://blog.websandbag.com/entry/2018/05/17/121730
■Laradockの起動
$ cd docker/laravel
$ git clone https://github.com/laradock/laradock.git docker/laravel/laradock … Laradockの入手
$ cd laradock
$ cp env-example .env … .envファイル(Laradockの設定ファイル)の作成
Laradock の .env を編集(MySQLのバージョンを5.7にする)
MYSQL_VERSION=latest
↓
MYSQL_VERSION=5.7
以下のように起動する
$ docker-compose up -d nginx mysql workspace phpmyadmin … コンテナの初期化(初回は非常に時間がかかる)
$ docker container ls
http://127.0.0.1/
(この時点では「404 Not Found」と表示される)
■Laravelの起動
workspaceコンテナからLaravelを操作できる
これはcomposerやnodeなど、Laravelに必要なツール一式が格納されたコンテナ
$ docker-compose exec --user=laradock workspace bash … 仮想環境へログイン
$ composer create-project --prefer-dist "laravel/laravel=5.5.*" blog … Laravelをインストール
$ exit … 仮想環境をいったん抜ける
Laradock の .env を編集(公開ディレクトリをblog内のpublicにする)
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../blog
$ docker-compose stop … 仮想環境を再起動(いったん停止させてから起動)
$ docker-compose up -d nginx mysql workspace phpmyadmin
$ docker-compose exec --user=laradock workspace bash … 仮想環境へ再度ログインする場合
$ php artisan --version
■PHPからMySQLへの接続
いったんPure-PHPでMySQLへの接続を検証してみる
/var/www/public/mysql.php
<?php
try {
$pdo = new PDO(
'mysql:dbname=blog;host=mysql',
'laradock',
'secret'
);
$stmt = $pdo->query('SELECT NOW() AS now;');
$data = $stmt->fetch(PDO::FETCH_ASSOC);
echo "<p>" . $data['now'] . "</p>\n";
$pdo = null;
} catch (PDOException $e) {
exit($e->getMessage());
}
実行すると以下のエラーになる(この時点では、laradockユーザもblogデータベースも作っていないので当然)
SQLSTATE[HY000] [1045] Access denied for user 'laradock'@'172.20.0.6' (using password: YES)
以下のように、MySQLコンテナでユーザを作成するとアクセスできるようになる
$ docker-compose exec mysql bash
# mysql -u root -p
root
> CREATE USER 'laradock'@'172.20.0.6' IDENTIFIED BY 'secret';
> GRANT ALL PRIVILEGES ON blog.* TO laradock;
> CREATE DATABASE blog DEFAULT CHARACTER SET utf8mb4;
■phpMyAdminの利用
以下にphpMyAdminがある
http://127.0.0.1:8080/
サーバ: mysql
ユーザ名: laradock
パスワード: secret
ログインしようとすると以下のエラーになる(phpMyAdminコンテナからの接続設定をしていないため)
mysqli_real_connect(): (HY000/1045): Access denied for user 'laradock'@'172.20.0.5' (using password: YES)
ユーザを作成するとアクセスできるようになる
> CREATE USER 'laradock'@'172.20.0.5' IDENTIFIED BY 'secret';
■LaravelからMySQLへの接続
マイグレーションしようとすると以下のエラーになる(workspaceコンテナからの接続設定をしていないため)
$ docker-compose exec --user=laradock workspace bash
$ php artisan migrate
SQLSTATE[HY000] [1045] Access denied for user 'laradock'@'172.20.0.4' (using password: YES)
ユーザを作成するとマイグレーションできるようになる
> CREATE USER 'laradock'@'172.20.0.4' IDENTIFIED BY 'secret';
■次回からの起動
以下で起動できる
しばらく待たないと「502 Bad Gateway」のエラーになる可能性があるので注意
$ cd docker/laravel/laradock
$ docker-compose up -d nginx mysql workspace phpmyadmin
以下でLaravelの操作ができる
$ docker-compose exec --user=laradock workspace bash
$ php artisan --version
以下でMySQLの操作ができる
$ docker-compose exec mysql bash
# mysql -u root -p
root
■MySQLコンテナが起動しなくなった場合
Laradock の .env を以下のように編集すると、その後MySQLコンテナが起動しなくなった
MYSQL_VERSION=latest
↓
MYSQL_VERSION=5.7
LaradockでMySQLがどうしても立ち上がらない人あつまれー! - Qiita
https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4
MySQLのデータは、.envの以下の場所で永続化されている
# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock/data
壊れたデータが残っている可能性がある。以下のフォルダを削除して各コンテナを再起動すると、MySQLコンテナが起動する
C:\Users\refirio\.laradock
■参考
Laradockを使ってLaravel 5.5環境を構築する - Qiita
https://qiita.com/rock619/items/62c2ab2252c405e26479
LaradockでMySQL5.5を使う(Docker + Laravel) - Qiita
https://qiita.com/mom0tomo/items/40219773c705b5175825
DockerとLaradockでPHPフレームワークとCMSの開発環境を構築する【MySQL( latest)8.0.11対応】 - Qiita
https://qiita.com/2no553/items/c1da7bb6dfed68c5af1b