
Eslo
Docker×Laravelがなんか知らんけど重たい・・・と悩んでいるあなたに朗報です。
劇的に改善できる可能性がありますのでぜひ最後まで読んでみてください。
DockerとLaravelを使うと重い理由
原因は端末のファイルシステムとDockerの相性です。
DockerはLinuxコンテナ技術をベースとしているため、ファイルアクセスが非効率になります。
特にLaravelのように頻繁にファイルを読み書きするフレームワークの場合、この遅延が顕著になります。
Dockerについてまだよくわからない・・・Volumeってなんだ・・・?という方は以下の書籍を参考にしてみてください。私は初学者の時こちらで学習しました!
解決方法
実はdocker-compose.ymlを修正するだけで解消できます。
以下のようにvendorをvolumeマウントするだけです。
services:
volumes:
- vendor-volumes:/var/www/html/vendor
volumes:
vendor-volumes:
ボリュームを作るために以下のコマンドを叩きます。
docker compose up -d
その後、アクセスすると以下のようなエラーが出ます。
Warning: require(/var/www/html/public/../vendor/autoload.php): Failed to open stream: No such file or directory in /var/www/html/public/index.php on line 34
Fatal error: Uncaught Error: Failed opening required '/var/www/html/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/html/public/index.php:34 Stack trace: #0 {main} thrown in /var/www/html/public/index.php on line 34
エラー解消のため、コンテナに入り、以下コマンドを叩きます。
composer install
以上の作業で劇的に早くなるはずです!
効果検証
apache-php-moduleで、Welcomeページの速度検証をします。
※私が作成したリポジトリなので自由に検証していただいて構いません。
- vendorをvolumeマウントする前は4.29s

- vendorをvolumeマウントした後は426.42ms

約10倍ほど早くなりました。Laravelがどれだけ多くのファイルを読み込んでいるのがわかる結果ですね。
まとめ
DockerとLaravelで「重い」と感じる原因と、その解消方法について解説しました。
作業効率は開発者にとって命みたいなものなので、この記事がお役に立てれば幸いです。