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