Zum Hauptinhalt springen

Dockerfile Build

Mit Dockerfile-Builds kann Deploio jede App erstellen, die mit einem Dockerfile gebaut werden kann. Dies ist besonders nützlich, wenn deine Anwendung eine Programmiersprache oder Runtime verwendet, die Deploio noch nicht nativ unterstützt.

Erste Schritte

Das Erstellen einer Dockerfile-Applikation funktioniert wie bei jeder anderen Applikation in Deploio. Die einzigen Voraussetzungen sind, dass dein Repository ein Dockerfile enthält und dass du bei der Erstellung das Argument --dockerfile angeben (oder den Schalter Dockerfile Build im Cockpit aktivieren).

In unserem Beispiele-Repository haben wir eine einfache Dockerfile-App.

  1. Öffne die Applikation erstellen-Seite.
  2. Gib deine Repository-Details an. 3. Aktiviere den Schalter Dockerfile Build.

Konfiguration

Deploio erlaubt es dir, verschiedene Aspekte deiner Dockerfile-basierten Applikation anzupassen:

Dockerfile-Pfad

Standardmässig verwendet Deploio das Dockerfile im Stammverzeichnis deines Repositorys.

Nachdem du Dockerfile Build aktiviert hast, kannst du den Pfad im Feld Dockerfile Path angeben.

Build-Context

Standardmässig setzt Deploio den Build-Context auf das Stammverzeichnis deines Repositorys.

Nachdem du Dockerfile Build aktiviert hast, kannst du das Verzeichnis im Feld Build Context angeben.

Build-Argumente

Du kannst Dockerfile Build-Argumente für deinen Build übergeben.

Füge deine Argumente im Bereich Build Environment Variables hinzu.

Deploio stellt ausserdem bestimmte Variablen automatisch als Build-Argumente bereit, wie zum Beispiel DEPLOIO_GIT_REVISION. Um diese während des Builds zu verwenden, deklariere sie als ARG in deinem Dockerfile:

ARG DEPLOIO_GIT_REVISION
RUN echo "Building revision $DEPLOIO_GIT_REVISION"

Folgende Variablen werden automatisch bereitgestellt:

VariableBeschreibungBuild-ZeitLaufzeit
PORTDer Port, auf dem deine App erreichbar ist.
DEPLOIO_APP_NAMEDer Name deiner Anwendung.
DEPLOIO_PROJECT_NAMEDer Name des Projekts, zu dem deine App gehört.
DEPLOIO_RELEASE_NAMEDer Name des aktuell aktiven Releases.
DEPLOIO_GIT_REVISIONDie Git-Revision (Commit-SHA) des deployten Quellcodes.

Runtime und Health-Checks

Die Deploio-Runtime verwendet den im Dockerfile angegebenen ENTRYPOINT und CMD, um deine Anwendung zu starten.

Um deiner App Traffic zu liefern, erwartet die Runtime, dass sie auf einem TCP-Socket auf 0.0.0.0:$PORT lauscht. Der Port ist standardmässig 8080, kann aber in der App-Definition auf eine beliebige gültige Portnummer konfiguriert werden. Die Runtime überprüft die App-Health durch eine TCP-Probe zum konfigurierten Port und Traffic fliesst erst zur App, wenn die Probe erfolgreich ist. Schlägt die TCP-Probe zu irgendeinem Zeitpunkt des Lebenszyklus fehl, startet die Runtime die App neu. Auch wenn die App aus irgendeinem Grund beendet wird, startet sie die Runtime automatisch neu.

Image-Grösse optimieren

Mit Dockerfile-Build erstellte Images sollten unkomprimiert nicht grösser als 2 GiB sein. Es gibt ein festes Limit von 10 GiB für die gesamte Build-Umgebung, aber über 2 GiB kann das System nicht mehr alle Layers zwischenspeichern und du wirst eine Verschlechterung der Build-Leistung feststellen.

Best Practices

Alle Best Practices, die für Dockerfiles im Allgemeinen gelten, gelten auch für Dockerfile-Builds auf Deploio. Eine umfassende Anleitung findest du in den offiziellen Docker Best Practices.

  • Versuche die Grösse deines Images zu minimieren, um schnellere Builds, schnellere Releases und eine verringerte Angriffsfläche zu erreichen.
  • Verwende Multi-Stage-Builds für kompilierte Sprachen, wann immer dies möglich ist.

Einschränkungen

Bitte beachte die folgenden Einschränkungen:

  • Es ist derzeit nicht möglich, eine bestehende Applikation, welche Buildpacks verwendet, direkt in eine Dockerfile-basierte Applikation umzuwandeln. Du musst eine neue Applikation erstellen, um Dockerfile-Builds zu nutzen.

    Du kannst nctl und jq verwenden, um eine neue Applikation mit der Konfiguration einer bestehenden zu erstellen:

    nctl get applications <existing-app-name> -o json | jq '
    del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .status) |
    .metadata.name = "<new-app-name>" |
    .spec.forProvider.dockerfileBuild.enabled = true
    ' | nctl create -f -