Docker-composeで環境変数の値をファイルで管理する

DBの設定をアプリケーション側で利用したい時よくやるやつ

とりあえずどんなふうに書くのかというとこんな感じ

services:
    db:
        image: mysql:8.0
        container_name: mysql_host
        environment:
            MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
            MYSQL_DATABASE: ${DATABASE}
            MYSQL_USER: ${DB_USER}
            MYSQL_PASSWORD: ${DB_USER_PASSWORD}
            TZ: '${TZ}'
   app:
        image: python
        container_name: app
        environment:
            MYSQL_DATABASE: ${DATABASE}
            MYSQL_USER: ${DB_USER}
            MYSQL_PASSWORD: ${DB_USER_PASSWORD}

で、これをどのように変数を共通化しているかというと、docker-compose.yamlと同階層に .env ファイルを配置しこんな感じに書く。

B_ROOT_PASSWORD=root
DATABASE=test_database
DB_USER=docker
DB_USER_PASSWORD=docker
TZ=Asia/Tokyo

実務でこれ運用した事ないから知らないけど、何故これが便利かと想像すると。

env.get()とかで値を取れば良いだけなので、アプリケーションにDBなどの情報を直接書かずにすむのが一番大きいのかな?

スケールのしやすさ、リポジトリに直接DBのパスワードとかあげなくてよくなったりとか...

一応このリポジトリで同じ事はやっている

https://github.com/nyo3q1/golang_simple_api