Kategorien
Docker GO Lang

Docker .env

Wie kann man in Docker environment variables setzen und diese in seinem Projekt auslesen? Wir werden dies an einem GO Lang Beispiel durchgehen.

Dafür erstellen wir erstmal ein Dockerfile. In diesem definieren wir Eigenschaften zu unserem GO Lang Projekt und wie mit diesen umgegangen werden soll. Zum Beispiel wird das Verzeichnis für die APP angegeben, oder das alle genutzten Libraries heruntergeladen werden müssen.

Unter anderem können wir aber auch environment variables definieren, die wir dann in unserem Projekt auslesen. So kann man einen Service bauen, der eventuell für verschiedenste Kunden genutzt werden soll. Das heißt man kann darüber die Datenbank Verbindung überprüfen oder ersetzten oder die hinterlegten SMTP Server anpassen ohne dies in einer lokalen .env Datei machen zu müssen und das Image immer neu erstellen zu lassen.

In unserem Beispiel sieht unser Dockerfile wie folgt aus:

FROM golang:latest

# Hier erstellen wir unsere environment variables
ENV USERNAME J&J Ideenschmiede UG

COPY . /go/src/app
WORKDIR /go/src/app

RUN go get ./
RUN go build -o app

CMD ./app

EXPOSE 80

Unser dazugehöriger GO Code ist jetzt sehr sehr schlicht aufgebaut. Wir geben für Sie nur die environment variable aus dem Dockerfile aus. Dem entsprechend finden Sie in unserem GO Code nur den Aufruf os.Getenv(„USERNAME“), der in einer Ausgabe definiert ist. Dies sieht dann wie folgt aus:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println(os.Getenv("USERNAME"))
}

Wenn wir jetzt daraus ein Image builden und dieses auf unseren Server laden, in unserem Fall ist es ein Linux Server auf dem Plesk installiert ist, dann sieht das Docker Image beim anlegen wie folgt aus:

Wenn wir uns nun das Konsolenprotokoll des Docker Containers ansehen, dann sehen wir, dass unser Docker Code eine direkte Ausgabe unserer environment variable vornimmt.

Mit dieser Methode kann man environment variables für z.B.: ein Backend setzen welches universal einsetzbar ist und eventuell auch für mehrere Projekte genutzt werden kann. So sparen Sie sich das anlegen von mehreren fast identischen Codebases in Ihrer Entwicklungsumgebung.

Von Jonas Kwiedor

Full- Stack Developer aus Hamburg. Liebt es sich mit Schnittstellen & Automationen auseinander zu setzen und sich mit der Programmiersprache GO Lang zu beschäftigen.