Dockerfileで環境変数を設定する方法

こんにちは、さるまりんです。

Dockerで環境を構築していると、環境変数を使いたい場面が出てきますよね。今回は、Dockerfileで環境変数を設定する方法をまとめておきます。

1. ENVで設定

まず、Dockerfile内で直接環境変数を設定する方法です。

Dockerfile

# 環境変数、データベースの接続設定をしています
ENV DATABASE_HOST=salusdb
ENV DATABASE_PORT=5432
ENV DATABASE_USER=salu
ENV DATABASE_PASSWORD=salupw

# 環境変数を利用しています
RUN echo "Connecting to database: $DATABASE_HOST:$DATABASE_PORT"

このように、ビルド時に値を固定します。
Dockerfile内で定義された環境変数は、すべてのレイヤーで利用可能です。

2. ビルド時に渡す変数を定義する

ARGを使うと、ビルド時に変数を渡すことができます。

Dockerfile

# ビルド時に渡す変数を定義
ARG DATABASE_PASSWORD

# 環境変数として設定
ENV DATABASE_HOST=saludb
ENV DATABASE_PORT=5432
ENV DATABASE_USER=salu
ENV DATABASE_PASSWORD=${DATABASE_PASSWORD}

ARGで定義された変数は、ビルド時に指定できます。そのため、パスワードのような情報を直接書かなくて済みます。

ビルド時には次のように変数を渡します:

docker build --build-arg DATABASE_PASSWORD=salupw -t salu-image .

3. docker-compose.ymlで設定

環境変数は、docker-compose.ymlファイルでも設定できます。

docker-compose.yml

version: '3.7'

services:
  db:
    image: postgres
  php:
    build: .
    environment:
      DATABASE_HOST: saludb
      DATABASE_PORT: 5432
      DATABASE_USER: salu
      DATABASE_PASSWORD: ${DATABASE_PASSWORD}

さらに、Dockerfileで定義した環境変数を.envファイルで上書きすることも可能です。

Dockerfile

ENV DATABASE_HOST=saludb
ENV DATABASE_PORT=5432
ENV DATABASE_USER=salu
ENV DATABASE_PASSWORD=${DATABASE_PASSWORD}

docker-compose.yml

version: '3.7'

services:
  php:
    build: .
    environment:
      - file=.env

.env

DATABASE_PASSWORD=salupw

環境構築の際、環境に依存する固定値をどう扱うかはよく悩みます。特にパスワードは直書きしたくないですよね。どこに書くのが一番安全かを考えるのは重要です。いろいろな方法知っていることで、それらをうまく使い分けて、環境変数の管理が柔軟にできるようになるはずです。

読んでくださってありがとうございました。

それではまた!