LoginSignup
2
1

Docker × Laravel がクソほど重い件

Last updated at Posted at 2023-12-18

概要

  • 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.再々度アクセスします。動いています。

image.png

適当に、パスをいじって画面遷移すると、おそらく1秒未満で画面遷移ができるはずです!

8.コンテナを消して、再度アクセスしたときにきちんと実行されるかの確認をします。

docker compose down
docker compose up -d

動かない場合は、手順4の空のボリュームあたりの設定が間違っていないか確認してみてください。それでもダメな場合は、以下に参考サイトを列挙するので試してみてください!

まとめ

Qiitaにまとめる中で、Dockerファイルの設定などを変更できそうな部分が思いついたので、また設定をいじろうと思います!

参考サイト

↓↓↓自分より丁寧です!↓↓↓

↓↓↓理由とかいろいろ書いてあるので、参考になります!↓↓↓

↓↓↓初心者には荷が重かったです↓↓↓

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1