Erstellen Sie eine Umgebungsvariablendatei in Docker
- Erstellen Sie ein Nginx-Projekt
- Definieren Sie ein Nginx-Image
- Erstellen Sie eine Umgebungsvariablendatei
- Erstellen Sie ein Bild
-
Führen Sie einen Nginx-Container mit
docker run
aus -
Erstellen Sie eine
.env
-Datei mitdocker-compose
-
Führen Sie einen Nginx-Container mit
docker-compose
aus - Abschluss
Umgebungsvariablen werden einer Anwendung in Form von Schlüssel-Wert-Paaren bereitgestellt. Wir können diese Variablen als Metadaten anzeigen, die Informationen zum Konfigurieren oder Ausführen einer Anwendung bereitstellen.
Wenn Sie beispielsweise eine Anwendung entwickeln, die sich in einen Kommunikationsdienst wie Twilio oder Vonage integrieren lässt, müssen Sie die API-Schlüssel bereitstellen, damit der Kommunikationsdienst funktioniert.
Diese API-Schlüssel können als Umgebungsvariablen bereitgestellt werden, und die Anwendung liest die Werte der Schlüssel aus der .env
-Datei.
In diesem Tutorial lernen wir die verschiedenen Möglichkeiten kennen, mit denen wir eine Umgebungsvariablendatei in Docker erstellen können.
Erstellen Sie ein Nginx-Projekt
Öffnen Sie die WebStorm IDE und wählen Sie Datei>Neu>Projekt
. Wählen Sie dann Leeres Projekt
und ändern Sie den Projektnamen in dockerfile-env-file
oder geben Sie einen beliebigen Namen ein.
Erstellen Sie eine index.html
-Datei unter dem aktuellen Ordner und kopieren Sie diesen Code und fügen Sie ihn in die Datei ein.
<!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>
In dieser Datei haben wir Bootstrap 5 verwendet, um eine Webseite zu erstellen, die ein Formular mit zwei Eingabefeldern, einem Kontrollkästchen und einer Schaltfläche anzeigt. Diese Webseite wird angezeigt, wenn wir einen Container ausführen.
Definieren Sie ein Nginx-Image
Erstellen Sie eine Datei namens Dockerfile
unter dem aktuellen Ordner und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
FROM nginx:1.22.0-alpine
COPY . /usr/share/nginx/html
FROM
– Erstellt ein benutzerdefiniertes Bild, indem Sie den Anweisungen dieses Befehls folgen. Beachten Sie, dass dies die erste Anweisung imDockerfile
sein muss.COPY
– Kopiert alle Dateien und Ordner im aktuellen Verzeichnis des Hosts in das Image-Dateisystem. Bei Verwendung eines Nginx-Images müssen die Dateien und Verzeichnisse kopiert werden nach:/usr/share/nginx/html
.
Erstellen Sie eine Umgebungsvariablendatei
Erstellen Sie eine Datei namens env-file.list
unter dem aktuellen Ordner und kopieren Sie die folgenden Schlüssel-Wert-Paare und fügen Sie sie in die Datei ein.
VERSION=1.0.0
FOO=bar
DESC=This is an Nginx service
DATE=12/11/2022
Wir werden diese Datei verwenden, um die Umgebungsvariablen in einen laufenden Container zu laden. Beachten Sie, dass der Inhalt der Datei die Syntax <Variable>=Wert
verwenden sollte, um die Variable auf den zugewiesenen Wert zu setzen oder den Wert aus der lokalen Umgebung zu lesen.
Beim Ausführen des Containers mit Dockerfile können wir jede Dateierweiterung verwenden, solange der Inhalt der Syntax entspricht. Wie Sie bereits bemerkt haben, verwendet diese Datei die Erweiterung .list
.
Erstellen Sie ein Bild
Um ein Nginx-Image mit der oben definierten Docker-Datei zu erstellen, öffnen Sie ein neues Terminalfenster auf Ihrem Computer und verwenden Sie den folgenden Befehl, um das Image zu erstellen.
~/WebstormProjects/dockerfile-env-file$ docker build --tag env-image:latest .
Dieser Befehl führt das Dockerfile sequentiell aus, um ein Image mit dem Tag env-image:latest
zu erstellen. Der Vorgang kann wie unten gezeigt im Terminalfenster angezeigt werden.
=> 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
Führen Sie einen Nginx-Container mit docker run
aus
Verwenden Sie im selben Fenster den folgenden Befehl, um einen Container mit dem Namen env-container
auszuführen.
~/WebstormProjects/dockerfile-env-file$ docker run --name env-container -d -p 80:80 --env-file ./env-file.list env-image:latest
Ausgang:
62fdc85504a2632e5d96aacec4c66c3087a6c1254afadf41bf629b474ceac90c
Beachten Sie, dass dieser Befehl das Flag --env-file
verwendet, um den Inhalt der env-file.list
in den Container zu laden.
Der Wert dieses Flags ist der Speicherort der Umgebungsvariablendatei. In unserem Fall befindet sich die Datei im aktuellen Ordner; somit haben wir den Wert ./env-file.list
übergeben.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Umgebungsvariablen in der Datei in den Container geladen wurden, um eine interaktive Shell für den Container zu öffnen.
~/WebstormProjects/dockerfile-env-file$ docker exec -it env-container /bin/sh
Ausgang:
/ #
Verwenden Sie auf dem neuen Shell-Terminal den folgenden Befehl, um alle Umgebungsvariablen für diesen Container zu drucken.
/ # printenv
Ausgang:
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=/
Beachten Sie, dass die Umgebungsvariablen, die wir in der env-file.list
hinzugefügt haben, in den Container geladen wurden. Zu den Variablen gehören DATE
, DESC
, VERSION
und FOO
.
Erstellen Sie eine .env
-Datei mit docker-compose
Im vorherigen Abschnitt haben wir den ersten Ansatz zum Festlegen einer .env
-Datei in Docker mit dem Befehl docker run kennengelernt. In diesem Abschnitt erfahren Sie, wie Sie mit docker-compose
eine .env
-Datei erstellen.
Als erstes müssen wir die Erweiterung der env-file.list
in env-file.env
ändern. Docker erwartet eine Datei mit der Endung .env
. Beachten Sie, dass dies die Standarderweiterung für Umgebungsvariablen ist.
Erstellen Sie nach dem Ändern der Dateierweiterung eine Datei mit dem Namen compose.yml
im aktuellen Ordner und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
services:
nginx-app:
restart: on-failure
build: ./
hostname: nginx-app-service
env_file:
- ./env-file.env
ports:
- '80:80'
Führen Sie einen Nginx-Container mit docker-compose
aus
Öffnen Sie ein neues Terminalfenster und verwenden Sie den folgenden Befehl, um einen Nginx-Container mit docker-compose
auszuführen.
~/WebstormProjects/dockerfile-env-file$ docker compose up -d
Ausgang:
[+] 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
Beachten Sie, dass wir den Befehl beim Ausführen des Containers nicht angeben müssen, da wir die env_file
im Docker compose.yaml
angegeben haben.
Dieser Befehl verwendet die Datei docker-compose
, um einen Container auszuführen, und verwendet automatisch die Datei env-file.env
im aktuellen Verzeichnis, um die Variablen in den Container zu laden.
Um zu überprüfen, ob die Variablen in der .env
-Datei in den Container geladen wurden, verwenden Sie den folgenden Befehl, um eine interaktive Shell aus dem Container auszuführen.
~/WebstormProjects/dockerfile-env-file$ docker exec -it dockerfile-env-file-nginx-app-1 /bin/sh
Ausgang:
/ #
Verwenden Sie auf dem neuen Shell-Terminal den folgenden Befehl, um alle Umgebungsvariablen im neuen Container zu drucken.
/ # printenv
Ausgang:
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=/
Aus der Ausgabe können wir ersehen, dass alle Variablen, die wir in der .env
-Datei hinzugefügt haben, erfolgreich in den Container geladen wurden. Zu den Variablen gehören DATE
, DESC
, VERSION
und FOO
.
Abschluss
In diesem Lernprogramm haben wir gelernt, wie Sie Umgebungsvariablen mithilfe einer Umgebungsvariablendatei festlegen. Im ersten Ansatz haben wir das Flag --env-file
mit dem Befehl docker run verwendet, um die Variablen in einen Container zu laden. Im zweiten Ansatz haben wir die Anweisung env_file
in der Datei compose.yaml
hinzugefügt, um die Dateien automatisch in einen Container zu laden.
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