Erstellen Sie eine Umgebungsvariablendatei in Docker

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein Nginx-Projekt
  2. Definieren Sie ein Nginx-Image
  3. Erstellen Sie eine Umgebungsvariablendatei
  4. Erstellen Sie ein Bild
  5. Führen Sie einen Nginx-Container mit docker run aus
  6. Erstellen Sie eine .env-Datei mit docker-compose
  7. Führen Sie einen Nginx-Container mit docker-compose aus
  8. Abschluss
Erstellen Sie eine Umgebungsvariablendatei in Docker

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
  1. FROM – Erstellt ein benutzerdefiniertes Bild, indem Sie den Anweisungen dieses Befehls folgen. Beachten Sie, dass dies die erste Anweisung im Dockerfile sein muss.
  2. 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 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

Verwandter Artikel - Docker Environment Variable