Dockerで環境変数を使用する方法

アプリケーションなどで、開発環境や本番環境で、設定情報が変更されるようなものは、ハードコードしたくないので、外部から参照できる設定ファイルにしておきたい。
その時に、Dockerの環境変数として設定できると嬉しい。

Dockerの環境変数設定

docker-compose.xml のプロパティとして、 env_file がある。
ここに、環境変数設定をおこなうことが可能となる。

<例>: env_file: .env

仮にpythonの環境に、このファイルを設定するとした場合、以下のようになる。

version: '3'
services:
  web:
    env_file: .env
    image: 'python:3.10'
    build: .
    volumes: 
    - .:/code
    tty: true
    ports: 
    - 8000:8000

環境変数ファイルの作成

上記 env_file で設定したファイルを作成し、内容を [key]=[value] の形式で記述する。

その際、文字列でも数列でも、クォーテーションなどでの囲いは必要ない。

例えば、mysqlの設定をしたいとしたときに、内容は以下となる。

DATABASE_NAME=test_database
DATABASE_USER=database_user
DATABASE_PASSWORD=database_password
DATABASE_HOST=my_database
DATABASE_PORT=3306

使用方法

上記設定を、Djangoの中で使用したいときは、 settings.pyDATABASE 部分を次のように変更する。

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('DATABASE_NAME'),
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD' : os.environ.get('DATABASE_PASSWORD'),
        'HOST': os.environ.get('DATABASE_HOST'),
        'PORT': os.environ.get('DATABASE_PORT'),
    }
}

os.environ.get で指定しているのが、環境変数ファイルに入力した key となる

参考

https://matsuand.github.io/docs.docker.jp.onthefly/compose/environment-variables/