dockerのcomposerコンテナでpackagist.jpを使う方法
phpやcomposer周りはコンテナを活用しているが、packagist.orgを使っていると日が暮れてしまう。
公式のcomposerコンテナでpackagist.jpを使う方法を調べたのでここに記載する。
TL;DR;
すでにホストOS側でpackagist.jpを使う設定をしている場合
- composer home(特に設定していなければ ~/.composer
)を/tmpにマウントすればよい。
- dockerコマンドであれば -v ~/.composer:/tmp
オプションを付与すれば良い。
設定がされていない場合 - packagist.jpを設定したあとに任意のコマンドを叩けるbashスクリプトを用意 - Dockerビルドしてentrypointに設定するなり、直接bashから叩くようにしてあげれば良い
やり方
すでにホストOSでcomposerにpackagist.jpが設定されている場合
composerコンテナは/tmpがcomposer homeとして設定されている。
そのためホストOSのcomposer home(特に設定していなければ ~/.composer
)を/tmpにマウントすればよい。
具体例
dockerコマンドであれば -v ~/.composer:/tmp
オプションを付与する。
メインがPHPのレポジトリでcomposer.jsonがレポジトリのrootに置いてあるのであれば以下のようなdockerコマンドを叩けば良い。
docker run --rm -v $(pwd):/app -v ~/.composer:/tmp -w /app composer:latest composer
docker-composeを利用するのであれば以下のように記載する。
... composer: image: composer:latest volume: - ~/.composer:/tmp ...
設定されていない場合
実行時に都度packagist.jpを設定するように変更してあげれば良い。
元のエントリーポイントにpackgist.jpを設定するコードを一行追加するだけ。
#!/bin/sh isCommand() { # Retain backwards compatibility with common CI providers, # see: https://github.com/composer/docker/issues/107 if [ "$1" = "sh" ]; then return 1 fi composer help "$1" > /dev/null 2>&1 } # check if the first argument passed in looks like a flag if [ "${1#-}" != "$1" ]; then set -- /sbin/tini -- composer "$@" # check if the first argument passed in is composer elif [ "$1" = 'composer' ]; then set -- /sbin/tini -- "$@" # check if the first argument passed in matches a known command elif isCommand "$1"; then set -- /sbin/tini -- composer "$@" fi # ここに1行足しただけ composer config -g repositories.packagist composer https://packagist.jp exec "$@"
これを適当にbashファイルとして起こして上げて、コンテナをビルドしてあげるなりbashファイルを実行するなりしてあげれば良い。
例えば上記のファイルを deco_entry.bash
という名前で同一階層に置いたとするなら、
こんな感じで叩く(bash deco_entry.bashの後ろに叩きたいcomposerコマンドで叩く)とわざわざコンテナをビルドしなくても使える。
$ docker run --rm -v $(pwd):/app -w /app composer:latest bash deco_entry.bash composer install
packagist.jpでちゃんと設定されている。
$ docker run --rm -v (pwd):/app -w /app composer:latest bash deco_entry.bash composer config -g --list | grep packagist.org.url [repositories.packagist.org.url] https://packagist.jp
終わり
これでcomposerコンテナを使うときはpackagist.jpを使って爆速で初期セットアップを終わらせられるようになる。