Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
概要(Overview・Refs Issue)
現行のDockerfileを用いてDockerイメージをビルドする場合、どれかファイルを1つ変更された状態だと
composer install
が再度実行されるため、再ビルドのコストが重い。Dockerのキャッシュを意識した処理順序にすることで、再ビルド時には
composer.json
及びcomposer.lock
が変更された時以外はcomposer install
をによるパッケージのダウンロード処理が行われないようにした(本PR作成者環境で80秒程度)ビルド速度の変化
※ 初回ビルドに関しては、所有者・パーミッション設定の処理が5~10秒程のコスト増となってしまっている方針(Policy)
実装に関する補足(Appendix)
Dockerビルドのキャッシュについて
参考: https://blog.hanhans.net/2017/02/25/docker-cache-composer-install/
Dockerのビルドにおいては、主に
COPY
,ADD
句により渡されるファイルのチェックサムが異なる場合に、以降の処理はキャッシュを使用しないという性質がある。現行ではCOPY句でプロジェクトフォルダ全体を転送した後に
composer install
を実行していたため、以降のキャッシュが一切効かないという状況。本PRでは、
composer install
に必要なcomposer.json
とcomposer.lock`のみ先にCOPY句で転送してパッケージのダウンロードを行い、その後に変更が大きいプロジェクトフォルダ全体をCOPY句で転送するようにしたことで、パッケージダウンロードまでのキャッシュが働くようにした。composer dumpautoload
に関しては、ファイルが出そろったタイミングでの実行。所有者の設定について
vendor以下のchmodについては、
www-data
ユーザでcomposer install
を実行しているため所有者の変更必要なし。時間短縮のために除外テスト(Test)
Dockerビルド関連のテスト
docker build .
が正常に完了することルート直下ファイル、
app
以下、src
以下のファイルの変更時はcomposer install
を含むステップにキャッシュが適用されることcomposer.json
,composer.lock
の変更時はcomposer install
を含むステップにキャッシュが適用されず、再ダウンロードが発生することパーミッション・所有者関連の確認
/var/www/html
以下のファイル・ディレクトリ(vendor含む)の所有者がwww-data
のままであること/var/www/html
以下のファイル・ディレクトリ(vendor含む)のパーミッションに差分がないことアプリ動作の確認
相談(Discussion)
初回ビルドが少し延びるのと、再ビルドが大幅に短縮されるのではどちらを取るべきか、若干迷います
vendor以下に対してchmodを実行する必要があるか?(数秒の短縮は見込めると思います)
drwxr-sr-x
になる(現行)drwxr-xr-x
になるマイナーバージョン互換性保持のための制限事項チェックリスト
レビュワー確認項目