はじめに
Docker上にLaravel環境を作成して開発をしていました。
なんてことないリクエストの処理に10秒程度かかることもあり、原因を調べてみたところDockerの設定に問題があるようなので対策をしました。
環境
- Windows 10
- Docker for Windows
- PHP 8.0.3
- Laravel 8.5.15
ディレクトリ構成
.
├── app # アプリケーションのソース(Laravel)
├── docker-compose.yml
└── infra # Dockerfile等の設定ファイル
原因
ホスト側のvendorディレクトリをマウント(バインドマウントと言うらしい)しているのが原因でした。
対策
名前付きボリュームを利用します。
docker-compose.yml
version: '3.5'
services:
php:
build: ./infra/php
image: performance_test_fast
container_name: performance_test_fast
environment:
VIRTUAL_HOST: 'fast.localhost'
CERT_NAME: 'localhost'
volumes:
- ./app:/var/www/html
- ./infra/apache/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- vendor-store:/var/www/html/vendor # 追加
networks:
- performance-fast-network
- proxy-network
networks:
performance-fast-network:
name: performance-fast-network
proxy-network:
external: true
name: proxy-network
volumes: # 追加
vendor-store: # 追加
結果
目で見てわかるレベルで速度が改善されました。
改善前 | 改善後 |
---|---|
5100ms | 137ms |
最後に
今までとりあえず動けばいいやという感覚で設定していたので、これを機にDockerの設定ファイルの見直しをしていきたいと思います。
間違いや改善点があればコメントにて教えていただければ幸いです。
参考
ボリュームの利用
Docker の Volume がよくわからないから調べた
Docker Composeのvolumesを使ってもっと効率的に