Docker + PHP + Laravel の動きが遅い!じゃあ早くしよ!

2022年10月30日日曜日

Laravel PHP

t f B! P L

Docker + PHP + Laravel の環境を構築したが、画面の表示が遅い!、とにかく遅い!!簡単な画面を表示するだけでも5〜10秒程度かかる。

これではとても開発効率が悪いので、改善する。

スポンサーリンク

遅い原因

この異常な遅さの原因は、主に以下の2つである。

storage/framework 配下のキャッシュ

フレームワークが storage/framework 配下に作るキャッシュファイルとローカルと同期する時に時間がかかる。本来キャッシュファイルは、表示速度の高速化の役割を果たすが、Docker環境下では逆にこれがボトルネックになる。

vendor 配下のライブラリ群

Laravelでは vendor 配下に必要なライブラリをインストールするため、このフォルダの中には大量のファイルが生成される。そして上の storage/framework と同じ理由でローカル側との同期に時間がかかっているようだ。

対策

つまり、storage/frameworkvendor の2つディレクトリが、ホスト側と同期しなければよい。

docker-compose.ymlを編集して、storage/frameworkvendor 用のボリューム
マウントを作成し、ローカルと同期しないようにする。
※ 今回のサンプルは /workspace/src/ の下に Laravelのプロジェクトが作成されている前提としています。

services:
  php:
    build: ./docker/php
    volumes:
      - ../:/workspace:cached
      - /workspace/src/storage/framework
      - /workspace/src/vendor

上記のようにすることで、ローカルとの同期はなくなるが、コンテナ起動時にキャッシュ用のディレクトがマウントされないので dockerfile を編集して、フォルダの作成とアクセス権の設定をする。

~~ 中略 ~~

WORKDIR /workspace
RUN composer global require "laravel/installer"

RUN mkdir -p /workspace/src/storage/framework/cache/data && \
    mkdir -p /workspace/src/storage/framework/sessions && \
    mkdir -p /workspace/src/storage/framework/views && \
    mkdir -p /workspace/src/storage/framework/testing && \
    chmod -R 777 /workspace/src/storage

vendor もマウントされないため、少し手間ではあるが、新しくコンテナを起動するたびに composer install で必要なライブラリをインストールする。

cd src
composer install

スポンサーリンク

めっちゃ早くなった!!

実際に上記のように設定して、起動してみたら、元々 5〜10秒かかっていた画面表示が、1秒程度で表示されるようになり、劇的に改善された。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ