[PHP][Docker]Docker コンテナ上の Composer キャッシュを永続化する
なんでもかんでも永続化するのもよろしくない(というかコンテナらしくない)と思いつつ、必要があってやってみた内容をメモ。
1. Composer のキャッシュのありかを確認する
以下のとおり、 composer
コマンドでキャッシュのパスを確認できる。
$ composer config cache-dir /root/.composer/cache
この /root/.composer/cache
の内容が永続化できればよい。
2. Composer のキャッシュを永続化するよう設定する
Composer のキャッシュがホスト側に永続化されるよう、 ./docker-compose.yml
に以下のように追記した。
services: php: volumes: - type: bind source: ./.composer target: /root/.composer
/root/.composer/cache
でなく /root/.composer
全体をバインドしているのは、source にあたるディレクトリ ./.composer
を空ディレクトリとして Git リポジトリに含めておきたかったため。
空ディレクトリ ./.composer
を Git リポジトリに含めるため、ファイル ./.composer/.gitignore
をコミットしておきたい。ところが、 cache
ディレクトリの中身はコマンド composer clear-cache
を実行するなどした際にすべて消される。そのため、 cache
ディレクトリを直接この方法で永続化しようとすると、キャッシュを破棄する際に ./.composer/.gitignore
まで消されてしまう。
空のディレクトリを維持するための、 .gitkeep と .gitignore の使い分け - Qiita
ところで volumes
の long syntax は人に勧められて今回初めて使った。
docker-compose の bind mount を1行で書くな
と、ひととおり事が済んだあとでよく考えたら、 type: bind
でなく type: volume
で十分だったかもしれない。こちらなら、ホスト側にディレクトリを用意する手間がない。