🦔
.envを使用したdocker-compose.ymlの環境変数設計
共通する値を一元管理してDokcer運用を楽にするのが目的です
定義方法は色々[1]ありますが .envファイル内で宣言する想定で書いていきます
環境変数の流れ
まずは全体の流れから...
.env (環境変数の一元管理)
↓
dokcer-compose.yml
↓
Dockerfile (不変値の宣言)
↓
コンテナ (内のRailsなど)
定義するには変数名=初期値です
.env
WORLDIR=app
docker-compose.ymlから環境変数を渡す2つの方法
1_docker-compose.yml => Dockerfile
2_docker-compose.yml => コンテナ
1_docker-compose.yml ⇒ Dockerfile
buildのargsキーを使います
宣言は、キー(変数名): 値(app)
docker-compose.yml
build:
args:
WORKDIR: $WORKDIR
# もしくは
- WORKDIR=$WORKDIR
上記の変数はARG命令で受け取ることができます↓
Dockerfile
ARG WORKDIR
流れとしては...
.env ⇒ docker-compose.yml args(渡す) ⇒ Dockerfile(受け取る)
2_docker-compose.yml ⇒ コンテナ
docker-compose.ymlからコンテナへ環境変数を渡す方法は2つあります
2-1_扱う環境変数が少ない場合はenvironment
docker-compose.yml
build:
environment:
WORKDIR: $WORKDIR
# もしくは
- WORKDIR=$WORKDIR
2-2_扱う環境変数が多い場合はenv_file
env_fileには値としてファイルパスを渡します
Dockerfile
services:
api:
...
env_file: .env # 絶対パス or 相対パス
複数ファイルを指定する場合
Dockerfile
services:
api:
...
env_file:
- ./.env
- ./api/envfile
- ./front/.envfile
以上です!
間違いがありましたらマサカリ等いただけると嬉しいです。
-
4つの定義方法
・docker-compose.ymlファイル内で宣言
・コンテナ実行時にコマンドで渡す
・.envファイル内で宣言
・独自ファイルを用意して宣言 ↩︎
Discussion