Docker で環境変数ファイルを作成する
- Nginx プロジェクトを作成する
- Nginx イメージを定義する
- 環境変数ファイルの作成
- イメージを構築する
-
docker run
を使用して Nginx コンテナーを実行する -
docker-compose
を使用して.env
ファイルを設定する -
docker-compose
を使用して Nginx コンテナーを実行する - まとめ
環境変数は、キーと値のペアの形式でアプリケーションに提供されます。 これらの変数は、アプリケーションを構成または実行するための情報を提供するメタデータとして表示できます。
たとえば、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
FROM
- このコマンドの指示に従ってカスタム イメージを作成します。 これは、Dockerfile
の最初の命令でなければならないことに注意してください。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
に追加した環境変数がコンテナーに読み込まれていることに注意してください。 変数には、DATE
、DESC
、VERSION
、および 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.yaml
で env_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
ファイルに追加したすべての変数がコンテナーに正常に読み込まれたことがわかります。 変数には、DATE
、DESC
、VERSION
、および FOO
が含まれます。
まとめ
このチュートリアルでは、環境変数ファイルを使用して環境変数を設定する方法を学びました。 最初のアプローチでは、フラグ --env-file
を docker run コマンドで使用して、変数をコンテナーにロードしました。 2 番目のアプローチでは、compose.yaml
ファイルに env_file
命令を追加して、ファイルをコンテナーに自動的にロードします。
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