はいっ、というわけでねー、今日はnginxのDockerイメージで遊んでみようと思うわけですが。
dockerコンテナの起動時に/etc/nginx/templatesにあるファイルをenvsubstにかけて/etc/nginx/conf.dに入れてくれるようになったので便利になりましたね、という話です。
Dockerhubのdescriptionにも「Using environment variables in nginx configuration」ってところにも書いてます。(↓のリンクはDockerhubがピンポイントでリンク貼れないのでGitHubに貼ってます)




動作確認とかして遊んでた成果物はこのあたりです




何ができるようになったかというと、↓みたいな感じで起動時のcommandを書き換えてenvsubstをかけてからnginxを起動するようにしてたワークアラウンドが公式で対応されたというだけですね。



上のQiitaの記事でも試行錯誤しているように、素直にenvsubstをかけると書き換えてほしくないところまで書き換えてしまってnginxが起動しない、みたいなことがあるんですが、ちゃんとそのあたりも一応対策されています。
システムで定義されている環境変数を全部envsubstに渡しているだけなので、間違って $remote_addr とかnginxの変数を環境変数に定義しないように気をつける必要がありますが。
「定義されている環境変数」ということは当然、定義されていない環境変数をconfに書いてしまうと変換されずにそのまま残るのでここも注意が必要ですね。

「このconfは環境変数使ってないので/etc/nginx/conf.dにマウント」、「こっちは環境変数使いたいのでconf.templateを/etc/nginx/templatesにマウント」みたいに使い分けるとめんどくさそうなので、全部/etc/nginx/templatesに突っ込んで/etc/nginx/conf.dはマウントしないようにしたほうがいいのかな?と個人的には思ってます。

ちなみに、1.18以前のイメージでは(2020/06/05時点では)対応入ってないみたいなので、楽したい場合は1.19以上を使いましょう。
$ docker inspect nginx:1.18 --format='Entrypoint:{{.Config.Entrypoint}}, Cmd:{{.Config.Cmd}}'
Entrypoint:[], Cmd:[nginx -g daemon off;]

$ docker inspect nginx:1.19 --format='Entrypoint:{{.Config.Entrypoint}}, Cmd:{{.Config.Cmd}}'
Entrypoint:[/docker-entrypoint.sh], Cmd:[nginx -g daemon off;]

以上です。