概要
- Dockerを用いてLaravelのWEBアプリ開発を行おうと考えた。
- パソコンを買い替えたばかりであるのに、画面遷移やAPI応答に15~30秒程度の時間がかかってしまった。
- メモリが8GBであることが原因であるかと考えたが、設定の問題であった
補足記事
同じ内容を次の記事で書き直したため、こちらも参照しながら解決してください。
問題点
- LaravelをDockerを用いて開発しようとすると、ストレスが半端ない。
原因
-
/storage/framework
,/vendor
が原因である - キャッシュの書き換えなどで大量にファイルを書き換えるようで、Volumeをマウントすると、書き換え処理の影響で重くなってしまうっぽい
解決策
- 単純にこれらをマウントしなければよい
自分はDocker初心者なので、手順を踏んでいますが、おそらくもっと効率のいい方法があるはず!!!
1.まず、通常通りにvolumをマウントします。
compose.yaml
volumes:
- ./src:/var/www/html
2.次に、通常通りにbuildと起動を行います。
docker compose up -d
3.Laravelをインストールします。
composer create-project --prefer-dist "laravel/laravel=10.*" .
4.通常通りインストールが完了したら、compose.yamlに以下を追記し再ビルドします。
compose.yaml
volumes:
- ./src:/var/www/html
- storage-volumes:/var/www/html/storage/framework
- vendor-volumes:/var/www/html/vendor
volumes:
storage-volumes:
vendor-volumes:
docker compose build
docker compose up -d
5.localhost:8080等設定したポートにアクセスします。エラーが発生しています。解決します。
error
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
/var/www/html/public/../vendor/autoload.php
がないと怒っていますねえ、、
コンテナidを調べます。
docker container ls
エラーを消すために、ホストマシンのvendorとstrageフォルダをdocker内の作業ディレクトリにコピーします。
# idは適宜変更してください。
docker cp ./src/vendor cdd242978d2e:/var/www/html
docker cp ./src/storage cdd242978d2e:/var/www/html
6.もう一度アクセスします。違うエラーが発生しています。
error
file_put_contents(/var/www/html/storage/framework/sessions/iKVv2XjaoEEY8msML26fhhGBCwh9mKqG4VnFPGjS): Failed to open stream: No such file or directory
権限が足りないと怒っているので、権限をあげます。
開発環境なのでフル権限を与えていますが、本番環境では慎重に権限を与えるようにしてください。
chmod -R 777 /var/www/html/storage
7.再々度アクセスします。動いています。
適当に、パスをいじって画面遷移すると、おそらく1秒未満で画面遷移ができるはずです!
8.コンテナを消して、再度アクセスしたときにきちんと実行されるかの確認をします。
docker compose down
docker compose up -d
動かない場合は、手順4の空のボリュームあたりの設定が間違っていないか確認してみてください。それでもダメな場合は、以下に参考サイトを列挙するので試してみてください!
まとめ
Qiitaにまとめる中で、Dockerファイルの設定などを変更できそうな部分が思いついたので、また設定をいじろうと思います!
参考サイト
↓↓↓自分より丁寧です!↓↓↓
↓↓↓理由とかいろいろ書いてあるので、参考になります!↓↓↓
↓↓↓初心者には荷が重かったです↓↓↓