はじめに
Docker Compose の初回起動時のみ、ライブラリのインストールを実行したい場合があります。
- NodeJS の場合
yarn installやnpm install - PHP の場合
composer install - Ruby on Rails の場合
bundle install
いい方法が無いか考えた末、 docker-compose.yaml の command 属性に工夫して解決させてみました。
検証環境
| |
Docker Compose 初回起動時にライブラリをインストールしておかないとどうなる?
例えば、以下のような NodeJS の Web アプリケーションを起動させたいと思います。
yarn start というコマンドでサーバが起動します。
| |
entrypoint 、 command の設定情報から、起動時に以下のコマンドが実行されます。
| |
この設定でアプリケーションを起動してみます。
| |
エラーとなってしまいました。
理由は単純で、 node_modules ディレクトリがないため、つまり yarn install コマンドを実行し、ライブラリをインストールしていないためです。
Docker Compose 初回起動前に yarn install しておけばいいが。。。
Docker Compose 起動前に yarn install を実行しておけば、 node_modules ディレクトリにライブラリがインストールされますが、こんなことを考えながらローカル開発環境を構築したく有りません。
初回のみ yarn install が自動的に実行させるようにするにはどうしたら良いでしょう?
Docker Compose 初回起動時のみ yarn install が実行させるようにする
command 属性に 3 行追加し、初回起動時のみ yarn install が実行されるようにしてみました。
| |
ロジックを簡単に解説すると以下のようになります。
~/.exec-onceファイルが存在するかをチェック- 存在していなかった場合は以下の処理を実行
yarn installコマンドを実行~/.exec-onceファイルを作成
yarn startコマンドを実行
2 の処理は初回起動時しか実行されません。
yarn install だけではなく、 bundle install 、 composer install にも利用できるはずです。
ひとこと
小細工でしのぎましたが、他のエンジニアの方々はどうやって対処しているのでしょう?
「こんなふうに実装するのがよい」というアドバイスが有れば是非教えて下さい。