Dockerfileに書く
FROM golang:1.19.2-alpine3.16
ENV GOPATH /go
ENV GO111MODULE on
ENV ROOT=/go/src/app
RUN mkdir ${ROOT}
WORKDIR ${ROOT}
(以下略
ここに書くとDockerfileのコマンドでサーバーを立ち上げる時の初期設定で参照できるし、コンテナがたった後の環境変数を参照することもできる。
主にコンテナ立ち上げ時に設定したい変数にいい。
他のコンテナからは参照できない点に注意
docker-compose.ymlに書く
version: "3"
services:
db:
build: ./mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: pw
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
ports:
- 3306:3306
volumes:
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnfl
Dockerfilleに書く場合と基本的に同じ。
ただ、設定しておくとimage側の初期設定をしてくれたりするケースがある(主にDB)。
docker hub mysql imageの例
docker docs 環境変数をコンテナ内に通す
こちらも他のコンテナからは参照できない
.envに書く
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=db
MYSQL_USER=user
MYSQL_PASSWORD=pw
.env
に書くと、docker-composeで立ち上がるコンテナ全てで共通して使える。
DBに関する設定のうち、アプリケーションサーバーとDBで共有したい設定とかに便利。
KEY=value形式で書く。.envはdocker-compose.yml
と同じ階層に置くのが無難。
環境変数競合時の優先順位
複数のファイルで同じ環境変数がある場合、Compose は使用する値を選ぶため、以下の優先度で使います。
1. Compose ファイル
2. シェル環境変数
3. 環境変数ファイル
4. Dockerfile
5. 変数が定義されていない
引用: docker docs docker compose run の環境変数を設定
シェル環境変数は、docker compose run -e DEBUG=1
みたいにコマンドオプションで渡せる環境変数のこと。
優先度を覚えてうまくやりくりするよりも、変数名が被らないようにする方がおすすめ。