要約
- Docker には Composer イメージがあって Docker Compose から使うと便利
- 使い方とサンプルコード
Composer どうやって実行してますか?
PHP 開発に Composer は必須です。
ではどうやって実行しているでしょうか。
- ローカルで composer コマンドを使う
- ローカルにインストールする
- composer.phar をコミットする
- Docker コンテナで composer コマンドを使う
- PHP コンテナにインストールする
- 自前インストール
- Composer イメージを使ってインストール
- コミットされた composer.phar を PHP コンテナ内で使う
- Composer コンテナを使う
- Docker で使う
- Docker Compose で使う ← 今回はこれ
- PHP コンテナにインストールする
- GitHub Actions で composer コマンドを使う
様々な実行方法があると思います。
ローカルで composer コマンドを使うには PHP もインストールしないといけません。
ローカルに環境を構築するのは大変です。チームメンバー全員の面倒なんて見たくありません。
そこで Docker コンテナの出番です。
よく見かけるのは PHP コンテナに Composer をインストールする方法です。
ですが Composer を使うのはライブラリのインストール(復元)時だけです。
稼働中の PHP コンテナに果たして必要なものでしょうか?
そこで今回は独立した Composer コンテナでコマンドを実行する方法を紹介します。
Composer コンテナ
docker
コマンドで直接使用する方法は ComposerをDockerコンテナで動かす - Qiita を、
PHP コンテナにインストールする方法は Docker に Composer をインストールするベストプラクティス(と解説) - Qiita を参考にしてください。
この記事では独立した Composer コンテナを docker-compose
コマンドで使用する方法を紹介します。
PHP コンテナは不要なので Composer だけ使いたい方にもおすすめです。
Docker Compose で定義する
version: "3.8"
services:
composer:
image: composer
command: "composer install"
volumes:
- ./:/app
./:/app
は :
の前がローカルのディレクトリパス、後が composer コンテナ内のパスです。
ローカルは composer.json, composer.lock を作成したい場所、 composer コンテナは /app
を指定します。
ライブラリのインストール (composer require)
docker-compose run composer composer require --dev phpunit/phpunit
composer
が 2 つあるのは 1 つ目がコンテナ名(変更可)で 2 つ目がコマンド名です。
ライブラリの復元 (composer install)
docker-compose.yml に command: "composer install"
を定義しておけば docker-compose up -d
する際に自動的に composer install
が実行されます。定義しなくても良いです。
もちろんコマンドでも実行できます。
docker-compose run composer composer install
ライブラリのバージョンアップ
composer.lock
の更新。
docker-compose run composer composer update
その他のコマンド
他のコマンドも同様に docker-compose run composer
から実行できます。
どんなコマンドがあるかは PHP開発でComposerを使わないなんてありえない!基礎編 - Qiita を参照してみてください。
サンプルコード
SnowCait/docker-compose-composer-example にサンプルコードを置いています。
Docker がインストールされていれば git clone して気軽に試せると思うので良かったら試してみてください。
参考にした記事
Docker環境でcomposerのimageつかってupdateしてみる - Qiita
補足:リンク先では command: "composer update"
となっていますが起動する度にバージョンが変わるのはよろしくないので command: "composer install"
にしておいた方がいいのではないかと思います。
余談
(Docker) Compose と Composer が似ていて間違えそう。