Contents
現象
Dockerで構築した環境があり、Chrome等でアクセスしたときにレスポンスがやたらと遅いのを解決したい。
遅い時は5秒以上かかったりする。
Laravel用のプロジェクトや、フレームワークなしPHP+VueSPAのプロジェクトなどで起きた。
環境
Windows 11 Pro
Docker Engine v27.0.3
PHP 8.3
Laravel 11
Docker構成
環境1
Laravel
Postgres
Nginx
環境2
PHP
Mysql
Nginx
Node
解決方法
node_modulesやvendorディレクトリをちゃんとVolumeに入れるようにする
docker-compose.yml抜粋
環境1
services:
laravel:
build:
context: .
dockerfile: ./container/laravel/Dockerfile
ports:
- 5173:5173
volumes:
- ../project/:{プロジェクトパス}
- project_node_modules_volume:{プロジェクトパス}/node_modules
- project_vendor_volume:{プロジェクトパス}/vendor
...
環境2
...
node:
build:
context: .
dockerfile: ./docker/node/Dockerfile
ports:
- 8081:8081
depends_on:
- app
stdin_open: true
tty: true
volumes:
- ../vue:/vue
- node_modules_volume:/vue/node_modules
...
推測
どうもマウントしているファイルを読むのがコスト高そうな感じ。できるだけマウントファイルを少なくすると良さそう。
でもvendorないとIDEが検索してくれないから嫌
ローカルにvendorファイルがなくなる(マウントしなくなる)のでPHPStormでwarningが増えるし、補完してくれなくなります。
なのでコンテナからローカルにコピーしましょう。(composerライブラリが増えるたびに実行する必要はありますが…)
以下でまずlaravel(PHP)のコンテナIDを確認します。
docker ps
そのコンテナからローカルにコピーします。(パスをよく考えること!)
docker cp {コンテナID}:{コンテナ内のvendor絶対パス} {ローカルにコピーしたいパス}
//例
docker cp 83f1f98d3e7d:/var/www/project/vendor/ ./
指定のローカルパス配下にvendorディレクトリが作成されるので軽くテストしてから実行しましょう。
以下記事を一読せよ:
https://qiita.com/RyotaIshii/items/25beeafaa836b4f4819c
ピンバック: 【Docker】Vue.jsのSPA開発環境(Node+PHP+Nginx+Mysql) – 技術ブログ