DockerとLaradockでPHPフレームワークとCMSの開発環境を構築します。Dockerでの開発環境構築を勉強するために参考情報を調べていたらLaradockという便利そうなものを見つけました。
Composerが入ってるだけだから別のフレームワークでも使える
PHPカンファレンス関西2017に行ってきました | プログラミングメカブログ
と言う記事も見かけたので、以下のPHPフレームワークとCMSの開発環境をDockerとLaradockを利用して用意してみようと思います。
Contents
今回実施するもの
PHPフレームワーク
CMS
mysqlバージョンについて
以下の記事を参考に[ my.cnf ]に[ default_authentication_plugin=mysql_native_password ]を追記しlatest(8.0.11)に対応しました。
参考:日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更
mysqlのデフォルトの認証方式がバージョン8.0.4から[ caching_sha2_password ] に変更があったため、latestバージョン(8.0.11)でPHPフレームワークやCMSの開発環境構築を進めて行こうとすると以下のようなエラーが発生します。
1 2 3 4 5 |
#エラー内容 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]") PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", []) |
エラー解消の参考情報は見つけたのですが、個人的にmysqlはバージョン8.0.3または5.7.22で問題ないため、latestバージョン(8.0.11)は使用しないことに決めました。
バージョン情報
- Mac OS 10.11.6(El Capitan)
- Docker Toolbox
- Docker version 18.03.0-ce
- Oracle VM VirtualBox Manager 5.2.12
- Laradock
- PHP 7.2.4 (fpm-fcgi)
- nginx version: nginx/1.15.0
- mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server – GPL)
- Laravel 5.6.26
その他情報
laradock設定
起動するコンテナ群の環境変数設定ファイル作成し、laradock設定を行います。
1 2 3 4 5 6 |
$ git clone https://github.com/Laradock/laradock.git $ cd laradock #コンテナ群の環境変数設定ファイル作成 $ cp env-example .env |
[ .env ]の[ Paths ]でPHPフレームワークやCMSを展開するディレクトリや、DBデータの永続場所が指定できますので必要に応じて変更して下さい。
1 2 3 |
APP_CODE_PATH_HOST=../ DATA_PATH_HOST=~/.laradock/data |
mysql latest設定
mysqlバージョンlatest(8.0.11)に合わせて設定を変更します。
1 2 3 4 5 6 7 8 9 10 11 |
$ vi docker-compose.yml ports: - "${MYSQL_PORT}:3306" networks: - backend + user: "1000:50" $ vi mysql/my.cnf + innodb_use_native_aio=0 + default_authentication_plugin=mysql_native_password |
コンテナ起動確認
[ .env ]と[ docker-compose.yml ] の設定を元にコンテナを生成起動します。
1 2 3 4 5 6 7 8 9 10 11 |
$ docker-compose up -d nginx mysql $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------ laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/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 |
workspaceコンテナ接続
PHPフレームワークやCMSをインストールするため[ workspace ]コンテナに接続します。
[ root@98cc6b1b406d:/var/www# ]のような表示がされたら接続は成功です。
1 2 |
$ docker-compose exec workspace bash |
PHPフレームワークやCMSをインストール
Laradockの準備ができたのでworkspaceコンテナにPHPフレームワークやCMSをインストールしていきます。例としてLaravelのみ紹介します。
Laravel設定
[ composer ]でインストールし、nginxの[ default.conf ]内のrootのpathを修正します。
1 2 3 4 5 6 7 8 9 |
# composer create-project laravel/laravel app-name --prefer-dist $ exit $ vi nginx/sites/default.conf - root /var/www/public; + root /var/www/app-name/public; $ docker-compose restart nginx |
Laravelスタートページ表示
1 2 |
http://192.168.99.100/ |
migrationテスト
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ docker-compose exec workspace bash # cd app-name # vi .env - DB_HOST=127.0.0.1 - DB_DATABASE=homestead - DB_USERNAME=homestead + DB_HOST=mysql + DB_DATABASE=default + DB_USERNAME=default # php artisan migrate:status # php artisan migrate |
参考
- mysqld: Can’t create/write to file ‘/var/lib/mysql/is_writable’ (Errcode: 13 – Permission denied) · Issue #219 · docker-library/mysql
- Mysql container working on Docker v17.12.0 but not on v18.01.0 · Issue #1584 · docker/for-win
- MySQL Container fails to start · Issue #1492 · laradock/laradock
- 日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更