🐋

Docker と Docker Compose の環境変数 - Part 2. オプションとプロパティ

2024/06/08に公開

はじめに

コマンドのオプションと compose.yaml ファイルのプロパティについてまとめました。

◯ 概観

1. 起動の流れ

Docker イメージ

Docker コンテナ


2. オプションとプロパティ

  1. docker コマンド
    1. Docker イメージのビルド時
      • docker image build コマンド
        1. キーバリュー指定
          • --build-arg オプション
        2. ファイル指定
          • ない
    2. Docker コンテナの実行時
      • docker container run コマンド
        1. キーバリュー指定
          • --env, -e オプション
        2. ファイル指定
          • --env-file オプション
  2. compose.yaml ファイル
    1. Docker イメージのビルド時
      • services.サービス.build プロパティ
        1. キーバリュー指定
          • args プロパティ
        2. ファイル指定
          • ない
    2. Docker コンテナの実行時
      • services.サービス プロパティ
        1. キーバリュー指定
          • environment プロパティ
        2. ファイル指定
          • env_file プロパティ
  3. docker compose コマンド
    1. Docker イメージのビルド時
      • docker compose build コマンド
        1. キーバリュー指定
          • --build-arg オプション
        2. ファイル指定
          • --env-file オプション
    2. Docker コンテナの実行時
      • docker compose up コマンド
        1. キーバリュー指定
          • ない
        2. ファイル指定
          • --env-file オプション
個人的に...

コマンドのオプション名や compose.yaml のプロパティ名があったりなかったりで混乱しました...😇 歴史的な経緯とか不都合とか色々あると思うのですが、こんな ↓ 感じで表現が統一されてたらよかったのに...

  1. Docker イメージのビルド時
    1. キーバリュー指定
      • arg
    2. ファイル指定
      • arg file
  2. Docker コンテナの実行時
    1. キーバリュー指定
      • env
    2. ファイル指定
      • env file

◯ シリーズ

Part 2 ですが Part 1 は読まなくても大丈夫だと思います。

◯ サンプルコード

ディレクトリの名前と章立てが対応しています

gh repo clone domodomodomo/docker-env-sample
cd docker-env-sample/part2/111

# for Bash - macOS, Ubuntu
bash cmd.sh

# for PowerShell - Windows
powershell ./cmd.ps1

1. docker コマンド

1.1. Docker イメージのビルド時

docker image build コマンド

1.1.1. キーバリュー形式

Bash
docker image build \
    --build-arg BLUE=Squirtle \
    --build-arg RED=Charmander \
    --build-arg GREEN=Bulbasaur \
    .

1.1.2. ファイル形式

見つかりませんでした。

1.2. Docker コンテナの実行時

docker container run コマンド

1.2.1. キーバリュー形式

--env オプションもしくは -e オプション

Bash
docker container run \
    --env BLUE=Squirtle \
    --env RED=Charmander \
    --env GREEN=Bulbasaur \
    app

1.2.2. ファイル形式

--env-file オプション

Bash
docker container run \xhackjp1
    --env-file .env.1 \
    --env-file .env.2 \
    --env-file .env.3 \
    app

2. compose.yaml ファイル

2.1. Docker イメージのビルド時

services.サービス.build プロパティ

2.1.1. キーバリュー形式

args プロパティ

compose.yaml
# Map Syntax
services:
  app:
    build:
      context: .
      args:
        BLUE: Squirtle
        RED: Charmander
        GREEN: Bulbasaur
compose.yaml
# Array Syntax
services:
  app:
    build:
      context: .
      args:
        - BLUE=Squirtle
        - RED=Charmander
        - GREEN=Bulbasaur

2.1.2. ファイル形式

見つかりませんでした。

2.2. Docker コンテナの実行時

services.サービス プロパティ

2.2.1. キーバリュー形式

environment プロパティ

compse.yaml
# Map Syntax
services:
  app:
    build:
      context: .
    environment:
      BLUE: Squirtle
      RED: Charmander
      GREEN: Bulbasaur
compse.yaml
# Array Syntax
services:
  app:
    build:
      context: .
    environment:
      - BLUE=Squirtle
      - RED=Charmander
      - GREEN=Bulbasaur

2.2.2. ファイル形式

compse.yaml
services:
  app:
    build:
      context: .
    env_file:
      - .env.1
      - .env.2
      - .env.3

3. docker compose コマンド

3.1. Docker イメージのビルド時

docker compose build コマンド

3.1.1. キーバリュー形式

--build-arg オプション

Bash
docker compose build \
    --build-arg BLUE="Squirtle" \
    --build-arg RED="Charmander" \
    --build-arg GREEN="Bulbasaur"

3.1.2. ファイル形式

--env-file オプション

Bash
docker compose \
    --env-file .env.1 \
    --env-file .env.2 \
    --env-file .env.3 \
    build

◯ good to know

--env-file--build-arg は、それぞれどのコマンドのオプションか区別すると Docker コマンドの書式が理解しやすくなる気がします。

Bash
docker --log-level debug \
    compose --env-file .env \
    build --build-arg BLUE="Squirtle"
コマンド コマンドのオプション \
    サブコマンド サブコマンドのオプション \
    サブサブコマンド サブサブコマンドのオプション
  1. --log-leveldocker コマンドのオプション*
  2. --env-filedocker compose サブコマンドのオプション*
  3. --build-argdocker compose build サブサブコマンドのオプション*

3.2. Docker コンテナの実行時

docker compose up コマンド

3.2.1. キーバリュー形式

見つかりませんでした。

3.2.2. ファイル形式

Bash
docker compose \
    --env-file .env.1 \
    --env-file .env.2 \
    --env-file .env.3 \
    up

おわりに

ありがとうございました。

https://qiita.com/domodomodomo/items/7ddc41399004a95b41d8

Discussion