11
12

More than 1 year has passed since last update.

dockerで環境変数を設定する方法3パターン

Posted at

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に書く

.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と同じ階層に置くのが無難。

docker docs .envについて

環境変数競合時の優先順位

複数のファイルで同じ環境変数がある場合、Compose は使用する値を選ぶため、以下の優先度で使います。
 1. Compose ファイル
 2. シェル環境変数
 3. 環境変数ファイル
 4. Dockerfile
 5. 変数が定義されていない
引用: docker docs docker compose run の環境変数を設定

シェル環境変数は、docker compose run -e DEBUG=1みたいにコマンドオプションで渡せる環境変数のこと。
優先度を覚えてうまくやりくりするよりも、変数名が被らないようにする方がおすすめ。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12