Docker Compose で環境変数を参照する方法の例

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml ファイルで環境変数を使用する必要があることがよくあります。この記事では、Docker Compose が環境変数を参照する方法に焦点を当てます。

注: この記事のデモ環境は Ubuntu 16.04 です。

CLIと環境変数を作成する

Compose CLI (compose コマンドライン、つまり docker-compose プログラム) は、COMPOSE_PROJECT_NAME および COMPOSE_FILE という名前の環境変数を認識します (サポートされている特定の環境変数については、こちらを参照してください)。たとえば、次の 2 つの環境変数を使用して、docker-compose のプロジェクト名と構成ファイルを指定できます。

$ エクスポート COMPOSE_PROJECT_NAME=テスト変数
$ エクスポート COMPOSE_FILE=~/projects/composecounter/docker-compose.yml 

次にアプリケーションを起動すると、環境変数で指定したプロジェクト名が表示されます。

環境変数を設定し、同時にコマンドライン オプションを指定すると、コマンドライン オプションの設定が適用されます。

$ docker-compose -p ニックネームプロジェクトアップ -d 

Compose ファイルで環境変数を参照する

次のデモのように、Compose ファイルで環境変数を直接参照することもできます。

バージョン: '3'
 サービス:
 ウェブ:
  画像: ${IMAGETAG}
  ポート:
  - 「5000:5000」
 レディス:
  画像: "redis:alpine"

環境変数 ${IMAGETAG} を通じて Web イメージを指定します。次に、エクスポートを通じて Compose 構成ファイルの環境変数の値を渡します。

対応する環境変数が設定されていない場合、compose はそれを空の文字列に置き換えることに注意してください。

この場合、Compose 構成ファイルで変数のデフォルト値を設定できます。

バージョン: '3'
サービス:
 ウェブ:
 画像: ${IMAGETAG:-defaultwebimage}
 ポート:
  - 「5000:5000」
 レディス:
 画像: "redis:alpine"

次に、IMAGETAG 変数が設定されていない場合は、defaultwebimage が適用されます。

この方法に加えて、後で紹介する .env ファイルを通じて環境変数のデフォルト値を設定することもできます。

コンテナに環境変数を渡す

まず、Compose ファイルでコンテナーの環境変数を設定する方法を見てみましょう。

ウェブ:
 環境:
 デバッグ: 1

Compose ファイル内の環境ノードは、コンテナの環境変数を設定するために使用されます。上記は以下と同等です。

$ docker run -e DEBUG=1

現在のシェル環境変数の値をコンテナの環境変数に渡すことも非常に簡単です。上記のコードの割り当て部分を削除するだけです。

ウェブ:
 環境:
 デバッグ:

この場合、環境変数 DEBUG が現在のシェルでエクスポートされていない場合は、compose ファイルでは null として解釈されます。

環境変数 DEBUG をエクスポートしようとすると:

$ エクスポート DEBUG=1 

これは私たちが設計した正しい使用シナリオです。

ファイルを使用してコンテナの複数の環境変数を設定する

environment を介してコンテナの環境変数を設定するだけでは物足りないと思われる場合は、docker-run の --env-file パラメータなどのファイルを介してコンテナの環境変数を設定することもできます。

ウェブ:
 環境変数:
 -web-variables.env

web-variables.env ファイルへのパスは docker-compose.yml ファイルに対する相対パスであることに注意してください。上記のコードは次のコードと同じ効果があります。

$ docker run --env-file=web-variables.env

web-variables.env ファイルでは、1 つ以上の環境変数を定義できます。

#Webコンテナ環境を定義する
アプリ名=helloworld
著者=ニック・リー
バージョン=1.0

結果を確認してください:

compose は env_file 設定を環境に変換することがわかりました。

.env ファイル

docker-compose.yml ファイル内で多数の環境変数を参照する場合、環境変数ごとにデフォルト値を設定するのは面倒になり、docker-compose.yml のシンプルさにも影響します。この時点で、.env ファイルを使用して、docker-compose.yml ファイルによって参照されるすべての環境変数のデフォルト値を設定できます。
docker-compose.yml ファイルの内容を次のように変更します。

バージョン: '3'
サービス:
 ウェブ:
 画像: ${IMAGETAG}     
 環境:
  アプリ名:
  著者:
  バージョン:
 ポート:
  - 「5000:5000」
 レディス:
 画像: "redis:alpine"

次に、同じディレクトリに .env ファイルを作成し、その内容を次のように編集します。

# env var のデフォルト値を定義します。
イメージタグ=デフォルトのウェブイメージ
APPNAME=デフォルトのアプリ名
AUTHOR=デフォルトの著者名
VERSION=デフォルトのバージョンは1.0です

結果を確認します。すべての環境変数が、.env ファイルで定義されたデフォルト値で表示されます。

さまざまなシナリオに合わせて環境変数を設定する

前のセクションからわかるように、Docker Compose は、docker-compose.yml ファイルで参照される環境変数を設定するのに十分な柔軟性を提供します。それらの優先順位は次のとおりです。

  1. ファイルを作成
  2. シェル環境変数
  3. 環境ファイル
  4. Dockerファイル
  5. 変数が定義されていません

まず、 docker-compose.yml ファイルに直接設定された値が最も優先されます。
次に、現在のシェルでエクスポートされた環境変数の値が続きます。
次は環境変数ファイルで定義された値です。
次はDockerfileで定義された値です。
最後に、該当する環境変数が見つからない場合は、環境変数が定義されていないとみなされます。

上記の優先順位の定義に従って、異なるシェル スクリプトで異なるシナリオの環境変数を定義し、エクスポートすることができます。次に、docker-compose コマンドを実行する前に、source コマンドを実行して、シェル スクリプトで定義された環境変数を現在のシェルにエクスポートします。こうすることで、環境変数を管理する場所の数を減らすことができます。次の例では、docker-compose.yml ファイルがあるディレクトリに test.sh と prod.sh を作成します。test.sh の内容は次のとおりです。

#!/bin/bash
# env var のデフォルト値を定義します。
エクスポート IMAGETAG=web:v1
APPNAME=HelloWorld をエクスポートする
エクスポート AUTHOR=Nick Li
エクスポート VERSION=1.0

prod.sh の内容は次のとおりです。

#!/bin/bash
# env var のデフォルト値を定義します。
エクスポート IMAGETAG=webpord:v1
APPNAME=HelloWorldProd をエクスポートします
エクスポート AUTHOR=Nick Li
エクスポート VERSION=1.0LTS

テスト環境で、次のコマンドを実行します。

$ ソース test.sh
$ docker-compose 設定

このとき、docker-compose.yml 内の環境変数はテスト環境に関する設定を適用します。

実稼働環境では、次のコマンドを実行します。

$ ソースprod.sh
$ docker-compose 設定

このとき、docker-compose.yml 内の環境変数は本番環境に関する設定を適用します。

要約する

Docker Compose は、環境変数の豊富なサポートと柔軟な使用を提供します。この記事の概要が、関連する使用方法を明確にし、さまざまな使用シナリオを簡潔にサポートするのに役立つことを願っています。

参照:

CLI環境変数を作成する
Compose の環境変数
ファイル変数の置換を作成する
ファイル内でデフォルトの環境変数を宣言する

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker Compose で利用可能な環境変数の詳細な説明
  • Docker での環境変数の使用とよくある問題の解決策

<<:  Vue3 の動的コンポーネントはどのように機能しますか?

>>:  MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法

推薦する

非常に便利な CSS 開発ツール 8 つを紹介

CSS3 パターン ギャラリーこの CSS3 パターン ライブラリには、純粋な CSS3 を使用して...

Vueでショッピングカートのすべての機能を実装する簡単な方法

主な機能は次のとおりです。製品情報を追加する製品情報を変更する単一の製品を削除する複数の製品を削除す...

ins タグと del タグの属性と使用法

insとdel は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、また...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...

Vue の基本リスナーの詳細な説明

目次Vueのリスナーとは何かリスナーの使い方vue リスナーウォッチVue リスナー - ディープリ...

HTML におけるベースタグの使用に関する詳細な説明

requireJS には、baseURL というプロパティがあります。baseURL を設定すること...

CentOS7にNginxをインストールして自動起動を設定する方法

1.公式サイトからインストールパッケージをダウンロードするhttp://nginx.org/en/d...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

Vue+ElementUI はページング関数を実装します - mysql データ

目次1. 問題2. 解決策2.1 ページングコンポーネント2.2 データベースデータを取得する関数:...

Dockerイメージの作成とプロジェクト全体のワンクリックパッケージングとデプロイ

一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...

MySQL でのトランザクションの使用方法

基礎トランザクションは、SQL ステートメントのグループに対するアトミック操作です。つまり、グループ...

TLS暗号化通信を使用してDockerにリモート接続する詳細な例

デフォルトでは、Docker はネットワーク化されていない UNIX ソケット上で実行されます。オプ...

WeChat ミニプログラム 宝くじ番号ジェネレーター

この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...

iframe ページで js 関数を呼び出すには js を使用します

最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...