ハマログ

株式会社イーツー・インフォの社員ブログ

Docker + Laravelの速度改善

下記の記事を参考にして、改善できました、ありがとうございます。

https://qiita.com/tyamahori/items/f627f85c7316e096a061

結論もそのままです。「ファイルのマウントを極力少なくする!」

備忘録として、経緯や調査の流れを書き出しておきたいと思います

  • Docker desktop + win + wsl2 + Laravel環境使用
  • さほど高機能でないサイトのトップページの表示に、約5秒かかる状態
  • docker-compose.ymlのvolumes部分で、cached(delegated)オプションを設定する記事発見 → 体感できず
      webserver:
    volumes:
     – ${APPLICATION}:${PROJECT}:delegated
  • docker-syncというミドルウェア?を使う記事発見 → 上手く動作せず
  • ファイルマウントを減らす記事発見 → 理解不足で上手く動作せず
  • dockerのファイルマウントと、volumesの仕様と書き方を学び直して、Dockerfileとdocker-compose.ymlの修正。
  • docker-composeのボリュームマウント時に、(たしか)ディレクトリが無くてエラーになるため、Dockerfile実行時にディレクトリを作るようにする。下記のように、シェルスクリプトで最後に呼び出す形にした。
    ENTRYPOINT [“/startup.sh”]

#!/bin/bash
mkdir -p /var/www/project/storage/framework/cache/data
mkdir -p /var/www/project/storage/framework/sessions
mkdir -p /var/www/project/storage/framework/views
mkdir -p /var/www/project/storage/framework/testing
chmod -R 777 /var/www/project/storage
composer install -d /var/www/project
composer dump-autoload
/usr/sbin/apachectl -DFOREGROUND

  • ローカル↔webserverコンテナ(Laravelとか入ってる)のファイル同期がアクセスに時間かかる原因の模様
  • アクセスが多いけど、ローカルに持っておく必要がないディレクトリを、docker-compose.ymlでボリュームマウントすることで、ローカルとは同期されなくなる(厳密には、ローカルにつくられたボリュームコンテナ?とwebserverコンテナは同期してるっぽい)

  webserver:
    volumes:
      – ${APPLICATION}:${PROJECT}:delegated
      # ignore
      – ${PROJECT}/storage/framework
      – ${PROJECT}/storage/app
      – ${PROJECT}/vendor

  • vender以下とcache系ファイルの同期を切ることで、5秒かかっていたのが2.5秒程度になった
  • まだ遅く感じるが、だいぶストレスが減ったので、ひとまずこれで良しとした

感想:Dockerは便利で楽しいが、やはり学習コストがかかると感じた。公式ドキュメント読むの大事。

Docker

  fuji   2020年8月26日


関連記事

リザーブドインスタンスの期限が近づいたら通知する

AWSのリザーブドインスタンス(RI)を購入し、運用を続けていましたが、期限切れ…

Amazon CloudFrontを.htaccessで適用

Amazon CloudFrontを.htaccessを利用してウェブサービスに…

Let’s EncryptのCertbotを アップデートする(ACMEv1の無効化対応)

Let’s Encryptからメールがきました。ACMEv1というプ…


← 前の投稿

次の投稿 →