Docker Schnellstart – Dockerfile (Kitty-App Teil 2)

In der letzten Lektion hast du dir die Kitty-App auf deinen Computer geladen (entweder per Browser-Download oder als Git-Clone). Jetzt können wir weitermachen, indem wir ein Dockerfile für diese App erstellen.

Was ist ein Dockerfile?

Ein Dockerfile ist eine einfache Textdatei, die eine Liste von Befehlen enthält, die der Docker-Client während der Erstellung eines Images aufruft.

Es ist ein einfacher Weg, um den Erstellungsprozess eines Images zu automatisieren. Das Beste daran ist, dass die Befehle, die du in ein Dockerfile schreibst, fast identisch mit den entsprechenden Linux-Befehlen sind. Das bedeutet, dass du nicht wirklich eine neue Syntax lernen musst, um deine eigenen Dockerfiles zu erstellen.

Das Anwendungsverzeichnis enthält bereits ein Dockerfile, aber da wir dies zum ersten Mal machen, werden wir eines von Grund auf erstellen. Um zu beginnen, erstellen wir eine neue leere Datei in unserem Lieblings-Texteditor und speichern sie im gleichen Ordner wie die Flask-App unter dem Namen Dockerfile.

Wir beginnen damit, unser Basis-Image zu spezifizieren. Verwende dazu das FROM Schlüsselwort:

FROM python:3

Der nächste Schritt ist normalerweise das Schreiben der Befehle zum Kopieren der Dateien und Installieren der Abhängigkeiten. Zuerst legen wir ein Arbeitsverzeichnis fest und kopieren dann alle Dateien für unsere App.

# Setze ein Verzeichnis für die App 
WORKDIR /usr/src/app 

# kopiere alle Dateien in den Container 
COPY . .

Nun, da wir die Dateien haben, können wir die Abhängigkeiten installieren.

# installiere die Abhängigkeiten 
RUN pip install --no-cache-dir -r requirements.txt

Das nächste, was wir angeben müssen, ist die Portnummer, die offengelegt werden muss. Da unsere Flask App auf Port 5000 läuft, werden wir diesen Port entsprechend angeben.

EXPOSE 5000

Der letzte Schritt ist das Schreiben des Befehls zum Ausführen der Anwendung, der einfach ist - python ./app.py. Wir benutzen den CMD-Befehl (Terminal), um das zu tun -

CMD ["python", "./app.py"]

Der primäre Zweck von CMD ist es, dem Container mitzuteilen, welches Kommando er ausführen soll, wenn er gestartet wird.

Das fertige Dockerfile

Damit ist unser Dockerfile nun fertig. So sieht es aus:

FROM python:3

# Setze ein Verzeichnis für die App
WORKDIR /usr/src/app

# kopiere alle Dateien in den Container
COPY.

# install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# definiere die Portnummer die der Container exponieren soll
EXPOSE 5000

# führe das Kommando aus
CMD ["python", "./app.py"]

(Das Dockerfile, wie oben gezeigt ist bereits als Datei in dem Kitty-App Projektordner abgelegt. Du musst hier also nichts machen)

Jetzt, wo wir unser Dockerfile haben, können wir unser Image bauen. Der Befehl docker build erledigt die Hauptarbeit, um ein Docker-Image aus einem Dockerfile zu erstellen.

Docker Image bauen mit "docker build"

Der folgende Abschnitt zeigt dir die Ausgabe, wenn du den Befehl ausführst. Bevor du den Befehl selbst ausführst (vergiss den Punkt nicht), stelle sicher, dass du meinen Benutzernamen durch deinen ersetzt. Dieser Benutzername sollte derselbe sein, den du bei der Registrierung auf Docker Hub erstellt hast. Wenn du das noch nicht getan hast, mach bitte weiter und erstelle einen Account. Der Befehl docker build ist recht einfach. Er benötigt einen optionalen Tag-Namen mit -t und einen Speicherort des Verzeichnisses, welches das Dockerfile enthält.

docker build -t deinUserName/kitty-app .

Das Ausführen des o.g. Befehls kann 1-2 Minuten in Anspruch nehmen. Das ist normal 🙂

Ausgabe:

Hier ist viel passiert ... Du brauchst das folgende Bild nicht im Detail durchlesen. Wichtig ist, dass unser Image-Build nach 69,5 Sekunden mit "FINISHED" erfolgreich abgeschlossen wurde.

Wenn du das python:3 Image noch nicht heruntergeladen hast, wird der Client zuerst das Image ziehen und dann dein Image erstellen. Daher wird deine Ausgabe nach dem Ausführen des Befehls anders aussehen als meine. Wenn alles gut gelaufen ist, sollte dein Image fertig sein! Starte docker images und schau, ob dein Image angezeigt wird.

Dein neues Image testen

Der letzte Schritt in diesem Abschnitt ist es, das Image zu starten und zu sehen, ob es tatsächlich funktioniert (ersetze meinen Benutzernamen durch deinen).

docker run -p 8888:5000 deinUserName/kitty-app
* Running on http://0.0.0.0:5000/

Der Befehl, den wir gerade ausgeführt haben, hat den Port 5000 für den Server innerhalb des Containers verwendet und diesen extern auf Port 8888 exponiert.

Gehe auf die URL mit Port 8888 (https://localhost:8888). Hier ist deine App jetzt live.

Die Kitty-App per Docker-Container:

Glückwunsch! Du hast erfolgreich dein erstes Docker-Image per Dockerfile erstellt!