プロジェクトでは、さまざまな条件や使用シナリオを制御するために、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 ファイルによって参照されるすべての環境変数のデフォルト値を設定できます。 バージョン: '3' サービス: ウェブ: 画像: ${IMAGETAG} 環境: アプリ名: 著者: バージョン: ポート: - 「5000:5000」 レディス: 画像: "redis:alpine" 次に、同じディレクトリに .env ファイルを作成し、その内容を次のように編集します。 # env var のデフォルト値を定義します。 イメージタグ=デフォルトのウェブイメージ APPNAME=デフォルトのアプリ名 AUTHOR=デフォルトの著者名 VERSION=デフォルトのバージョンは1.0です 結果を確認します。すべての環境変数が、.env ファイルで定義されたデフォルト値で表示されます。 さまざまなシナリオに合わせて環境変数を設定する 前のセクションからわかるように、Docker Compose は、docker-compose.yml ファイルで参照される環境変数を設定するのに十分な柔軟性を提供します。それらの優先順位は次のとおりです。
まず、 docker-compose.yml ファイルに直接設定された値が最も優先されます。 上記の優先順位の定義に従って、異なるシェル スクリプトで異なるシナリオの環境変数を定義し、エクスポートすることができます。次に、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環境変数を作成する 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vue3 の動的コンポーネントはどのように機能しますか?
>>: MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法
CSS3 パターン ギャラリーこの CSS3 パターン ライブラリには、純粋な CSS3 を使用して...
問題の説明Tencent Cloud CentOS7にnginxをインストールするsudo yum ...
主な機能は次のとおりです。製品情報を追加する製品情報を変更する単一の製品を削除する複数の製品を削除す...
insとdel は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、また...
[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...
目次Vueのリスナーとは何かリスナーの使い方vue リスナーウォッチVue リスナー - ディープリ...
requireJS には、baseURL というプロパティがあります。baseURL を設定すること...
1.公式サイトからインストールパッケージをダウンロードするhttp://nginx.org/en/d...
最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...
目次1. 問題2. 解決策2.1 ページングコンポーネント2.2 データベースデータを取得する関数:...
一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...
基礎トランザクションは、SQL ステートメントのグループに対するアトミック操作です。つまり、グループ...
デフォルトでは、Docker はネットワーク化されていない UNIX ソケット上で実行されます。オプ...
この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...
最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...