Docker で環境変数ファイルを作成する

David Mbochi Njonge 2023年6月20日
  1. Nginx プロジェクトを作成する
  2. Nginx イメージを定義する
  3. 環境変数ファイルの作成
  4. イメージを構築する
  5. docker run を使用して Nginx コンテナーを実行する
  6. docker-compose を使用して .env ファイルを設定する
  7. docker-compose を使用して Nginx コンテナーを実行する
  8. まとめ
Docker で環境変数ファイルを作成する

環境変数は、キーと値のペアの形式でアプリケーションに提供されます。 これらの変数は、アプリケーションを構成または実行するための情報を提供するメタデータとして表示できます。

たとえば、Twilio や Vonage などの通信サービスと統合するアプリケーションを開発する場合、通信サービスが機能するには API キーを提供する必要があります。

これらの API キーは環境変数として提供でき、アプリケーションは .env ファイルからキーの値を読み取ります。

このチュートリアルでは、docker で環境変数ファイルを作成するために使用できるさまざまな方法を学習します。

Nginx プロジェクトを作成する

WebStorm IDE を開き、File>New>Project を選択します。 次に、空のプロジェクトを選択し、プロジェクト名をdockerfile-env-fileに変更するか、任意の名前を入力します。

現在のフォルダーの下に index.html ファイルを作成し、このコードをコピーしてファイルに貼り付けます。

<!doctype html>
<html lang="en">
<head>
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
          crossorigin="anonymous">

</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
        </div>
        <div class="col-md-6">
            <form class="mt-5">
                <div class="mb-3">
                    <label for="exampleInputEmail1" class="form-label">Email address</label>
                    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
                    <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
                </div>
                <div class="mb-3">
                    <label for="exampleInputPassword1" class="form-label">Password</label>
                    <input type="password" class="form-control" id="exampleInputPassword1">
                </div>
                <div class="mb-3 form-check">
                    <input type="checkbox" class="form-check-input" id="exampleCheck1">
                    <label class="form-check-label" for="exampleCheck1">Check me out</label>
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>
        </div>
        <div class="col-md-3">

        </div>

    </div>

</div>


</body>
</html>

このファイルでは、Bootstrap 5 を使用して、2つの入力フィールド、チェックボックス、およびボタンを含むフォームを表示する Web ページを作成しました。 コンテナを実行すると、この Web ページが表示されます。

Nginx イメージを定義する

現在のフォルダーの下にDockerfileという名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。

FROM nginx:1.22.0-alpine
COPY . /usr/share/nginx/html
  1. FROM - このコマンドの指示に従ってカスタム イメージを作成します。 これは、Dockerfile の最初の命令でなければならないことに注意してください。
  2. COPY - ホストの現在のディレクトリにあるすべてのファイルとフォルダをイメージ ファイル システムにコピーします。 Nginx イメージを使用する場合、ファイルとディレクトリを /usr/share/nginx/html にコピーする必要があります。

環境変数ファイルの作成

現在のフォルダーの下に env-file.list という名前のファイルを作成し、次のキーと値のペアをコピーしてファイルに貼り付けます。

VERSION=1.0.0
FOO=bar
DESC=This is an Nginx service
DATE=12/11/2022

このファイルを使用して、実行中のコンテナに環境変数をロードします。 ファイルの内容では、構文 <variable>=value を使用して変数を割り当てられた値に設定するか、ローカル環境から値を読み取る必要があることに注意してください。

Dockerfile を使用してコンテナーを実行する場合、コンテンツが構文に従っている限り、任意のファイル拡張子を使用できます。 ご指摘のとおり、このファイルには .list 拡張子が使用されています。

イメージを構築する

上で定義した Dockerfile を使用して Nginx イメージをビルドするには、マシンで新しいターミナル ウィンドウを開き、次のコマンドを使用してイメージをビルドします。

~/WebstormProjects/dockerfile-env-file$ docker build --tag env-image:latest .

このコマンドは、Dockerfile を順次実行して、タグ env-image:latest を使用してイメージをビルドします。 以下に示すように、プロセスはターミナル ウィンドウから確認できます。

 => CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69ef3e8f0021ce1ca98e0eb21117b97ab8b64127e3ff6e444ec                                              0.0s
 => [internal] load build context                                                                                                                                                0.3s
 => => transferring context: 2.45kB                                                                                                                                              0.0s
 => [2/2] COPY . /usr/share/nginx/html                                                                                                                                           0.8s
 => exporting to image                                                                                                                                                           1.0s
 => => exporting layers                                                                                                                                                          0.7s
 => => writing image sha256:de1d72539dd9f36eea4a73d47c07d5aa27bb5f693104c00d9d55a52fba4c26a6                                                                                     0.1s
 => => naming to docker.io/library/env-image:latest

docker run を使用して Nginx コンテナーを実行する

同じウィンドウで、以下のコマンドを使用して、env-container という名前のコンテナーを実行します。

~/WebstormProjects/dockerfile-env-file$ docker run --name env-container -d -p 80:80 --env-file ./env-file.list env-image:latest

出力:

62fdc85504a2632e5d96aacec4c66c3087a6c1254afadf41bf629b474ceac90c

このコマンドはフラグ --env-file を使用して、コンテナー内の env-file.list の内容をロードすることに注意してください。

このフラグの値は、環境変数ファイルの場所です。 この場合、ファイルは現在のフォルダーにあります。 したがって、値 ./env-file.list を渡しました。

ファイル内の環境変数がコンテナーに読み込まれたことを確認するには、次のコマンドを使用してコンテナーの対話型シェルを開きます。

~/WebstormProjects/dockerfile-env-file$ docker exec -it env-container /bin/sh

出力:

/ #

新しいシェル ターミナルで、次のコマンドを使用して、このコンテナーのすべての環境変数を出力します。

/ # printenv

出力:

HOSTNAME=62fdc85504a2
SHLVL=1
HOME=/root
PKG_RELEASE=1
DATE=12/11/2022
DESC=This is an Nginx service
VERSION=1.0.0
TERM=xterm
NGINX_VERSION=1.22.0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FOO=bar
NJS_VERSION=0.7.6
PWD=/

env-file.list に追加した環境変数がコンテナーに読み込まれていることに注意してください。 変数には、DATEDESCVERSION、および FOO が含まれます。

docker-compose を使用して .env ファイルを設定する

前のセクションでは、docker run コマンドを使用して docker で .env ファイルを設定する最初のアプローチを学びました。 このセクションでは、docker-compose を使用して .env ファイルを設定する方法を学びます。

最初にすべきことは、env-file.list の拡張子を env-file.env に変更することです。 Docker は、拡張子が.envのファイルを想定しています。 これは、環境変数のデフォルトの拡張子であることに注意してください。

ファイル拡張子を変更した後、現在のフォルダーの下に compose.yml という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。

services:
  nginx-app:
    restart: on-failure
    build: ./
    hostname: nginx-app-service
    env_file:
      - ./env-file.env
    ports:
      - '80:80'

docker-compose を使用して Nginx コンテナーを実行する

新しいターミナル ウィンドウを開き、次のコマンドを使用して、docker-compose を使用して Nginx コンテナーを実行します。

~/WebstormProjects/dockerfile-env-file$ docker compose up -d

出力:

[+] Building 12.4s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                 0.2s
 => => transferring dockerfile: 31B                                                  0.0s
 => [internal] load .dockerignore                                                    0.2s
 => => transferring context: 2B                                                      0.0s
 => [internal] load metadata for docker.io/library/nginx:1.22.0-alpine               9.6s
 => [auth] library/nginx:pull token for registry-1.docker.io                         0.0s
 => [internal] load build context                                                    0.2s
 => => transferring context: 476B                                                    0.0s
 => CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69e  0.0s
 => [2/2] COPY . /usr/share/nginx/html                                               1.1s
 => exporting to image                                                               1.0s
 => => exporting layers                                                              0.7s
 => => writing image sha256:e4bd638d4c0b0e75d3e621a3be6526bfe7ed4543a91e68e4829e5a7  0.1s
 => => naming to docker.io/library/dockerfile-env-file_nginx-app                     0.1s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
 ⠿ Network dockerfile-env-file_default        Created                                0.2s
 ⠿ Container dockerfile-env-file-nginx-app-1  Started                                2.9s

Docker compose.yamlenv_file を指定したので、コンテナーを実行するときにコマンドを指定する必要がないことに注意してください。

このコマンドは、docker-compose ファイルを使用してコンテナを実行し、現在のディレクトリにある env-file.env ファイルを自動的に使用してコンテナに変数をロードします。

.env ファイルの変数がコンテナーに読み込まれたことを確認するには、次のコマンドを使用して、コンテナーから対話型シェルを実行します。

~/WebstormProjects/dockerfile-env-file$ docker exec -it dockerfile-env-file-nginx-app-1 /bin/sh

出力:

/ #

新しいシェル ターミナルで、次のコマンドを使用して、新しいコンテナー内のすべての環境変数を出力します。

/ # printenv

出力:

HOSTNAME=nginx-app-service
SHLVL=1
HOME=/root
PKG_RELEASE=1
DATE=12/11/2022
DESC=This is an Nginx service
VERSION=1.0.0
TERM=xterm
NGINX_VERSION=1.22.0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FOO=bar
NJS_VERSION=0.7.6
PWD=/

出力から、.env ファイルに追加したすべての変数がコンテナーに正常に読み込まれたことがわかります。 変数には、DATEDESCVERSION、および FOO が含まれます。

まとめ

このチュートリアルでは、環境変数ファイルを使用して環境変数を設定する方法を学びました。 最初のアプローチでは、フラグ --env-file を docker run コマンドで使用して、変数をコンテナーにロードしました。 2 番目のアプローチでは、compose.yaml ファイルに env_file 命令を追加して、ファイルをコンテナーに自動的にロードします。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

関連記事 - Docker Environment Variable