Composeは複数のコンテナからなるサービスの構成方法をYAMLで定義しておくと、構築や実行といった管理が自動化されて便利なツールですが、難点がひとつあります。Composeファイルが複数あるとたちまち不便に...僕が携わっている現場ではRailsやPHPアプリのサービス構築をdocker-composeでやっていますが、開発者個人の開発環境(development)、みんなの成果物を統合してみるステージング環境(staging)、そしてユーザにサービス提供するためのプロダクション環境(production)の3つの環境があり、それぞれにdocker-compose.ymlがあります。同じdocker-compose.ymlで全ての環境を網羅できればいいのですが、開発環境はDockerコンテナのMySQLやRedisを使うが、プロダクション環境ではAWSのRDSやElastiCacheを使うといったように、環境によって構成がバラバラだったりします。そのため、各環境用にComposeファイルを作る必要があり、結果的に次のように3つのファイルができています。ようにファイル名を-fオプションで指定しないとならなくなりました。docker-composeコマンドをよく使うのは開発環境だったので、開発環境用のYAMLだけdocker-compose.ymlとしてみたこともありましたが、オペミスが増えたのでやめました。docker-compose.staging.ymlを付け忘れて開発環境が起動してしまう、といった問題があったのです。開発環境でも-fを指定するようにしましたが、これもこれで面倒だなと思います。COMPOSE_FILEを指定すると-fオプション地獄から開放されるDockerのドキュメントを精読してみると、docker-composeのデフォルトComposeファイルを指定できる環境変数にCOMPOSE_FILEがあるのを見つけました。Variables「Composeファイルのパスを指定します。指定されていなければ、Composeはdocker-compose.ymlという名前のファイルをカレントディレクトから親ディレクトリまで探していきます」ということなので、COMPOSE_FILEをセットしておくことでdocker-compose.yml以外のファイルを-fオプションなしに読み込んでくれるようになります。COMPOSE_FILEがドキュメントどおりに使えるか実際に試してみようと思います。僕のdocker-composeのバージョンは1.8.0-rc2でした。2016試しに2種類のComposeファイルを作ります。configしてみます。Composeファイルを見つけられません。docker-compose.yaml環境変数にCOMPOSE_FILEをセットしてみます。configを実行すると開発環境用のComposeファイルが読み込まれるようになっているのが分かります。{}今のところCOMPOSE_FILEの定義はプロジェクトごとがいい?COMPOSE_FILEをセットすれば-fオプションから開放されることは分かったものの、更に課題が見つかりました。それは、Composeファイルの候補は1つしか指定できないという点です。Dockerのドキュメントを見るとCOMPOSE_FILE=docker-compose.yaml:docker-compose.prod.ymlのように:で区切ると複数読み込まれるような記載があって期待しましたが、これは「コロンで区切ったうち、どれかが見つかれば」という意味ではなく、「コロンで区切った全てのComposeファイルを読み込む」という意味合いになるようです。:がパスセパレータなので"OR"の意味かなと思いましたが、"AND"の意味だそうです。COMPOSE_FILEの:が"OR"の意味であれば、.bashrcなどに書いておこうかなと思いましたが、これではそうもいきませんね...^^;この解決策はベストなものが見つかりませんでしたが、僕が携わっているプロジェクトでは誰でも開発環境をコマンド1つで起動できるよう、開発環境の起動をシェルスクリプトとtmuxinatorで自動化しています。今回はtmuxinator.ymlに書いておく方法で対処することにしました。COMPOSE_FILE=...を書くだけですが、プロジェクトによって違ってくる場合は、このようにCOMPOSE_FILEの定義はプロジェクトごとにしておくのが良さそうですね。まとめ環境ごとにComposeファイルがある場合、環境ごとにComposeファイルを固定できるCOMPOSE_FILEという環境変数について紹介しました。複数のComposeファイル候補を設定することはできませんが、-fオプション地獄からは開放されるためにはまあまあいい解決策なのではないでしょうか。7.3から出来るようになったようですishi:LAN上の別機からコンテナのウェブサーバにささっと接続できるツールを作ったDockerのローカル開発環境DinghyでSSL自己証明書を使う方法suintwitter2016年7月26日Composeファイルが複数あるとたちまち不便に...COMPOSE_FILEを指定すると-fオプション地獄から開放される今のところCOMPOSE_FILEの定義はプロジェクトごとがいい?まとめ。