dockerでNode.jsのアプリを動かす際、同じイメージを使いたいけど開発環境や本番環境などで連携システムのIDやURLが異なったりする、またはイメージを作成した後にこれらの値を変更したいことがありますよね。
解決策の一つとして、node-configのcustom environment variablesを使う方法があります。
custom environment variablesとは
node-configといえば、一般的な使い方はNODE_ENV=development
などを指定して、config/development.json
などを呼び出して使うことではないでしょうか。
custom environment variablesは、config/custom-environment-variables.json
に左辺に変数値、右辺に環境変数名と指定しておけば、実行時に環境変数が存在する場合はそちらを優先的に読み込むものとなっています。
custom-environment-variables.jsonの例
{
"url" : "URL",
"account" : {
"name" : "ACCOUNT_NAME",
"pass" : "ACCOUNT_PASS",
"code" : "ACCOUNT_CODE "
}
}
custom-environment-variablesで指定した変数が別のconfigのjsonで同じように定義されていたとしても、環境変数に指定してあればこちらが優先されます。
例
default.jsonが以下とする
{
"url" : "https://example.com",
"account" : {
"name" : "TARO",
"pass" : "PASSWORD"
}
}
run.js
var config = require('config')
console.log(config.account.name)
実行結果
PS > node .\run.js
TARO
PS > $env:ACCOUNT_NAME="JIRO"
PS > node .\run.js
JIRO
PS >
default.jsonで指定していたTARO
が当初表示されますが、環境変数でACCOUNT_NAMEにJIRO
と設定したところ、その値が実行結果に反映されました。
これを使ってDockerfileなどに環境変数を指定すれば、イメージの再作成を行うことなく環境ごとに異なる値を後から自由に修正することが可能になります。
参考
https://github.com/lorenwest/node-config/wiki/Environment-Variables#custom-environment-variables