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.
- Cockpit
- nctl
- Öffne die Applikation erstellen-Seite.
- Gib deine Repository-Details an. 3. Aktiviere den Schalter Dockerfile Build.
Du kannst die Beispiel-App mit nctl erstellen: bash nctl create application dockerfile-rust \ --git-url=https://github.com/ninech/deploio-examples \ --git-revision=main \ --git-sub-path=dockerfile/rust \ --dockerfile
Konfiguration
Deploio erlaubt es dir, verschiedene Aspekte deiner Dockerfile-basierten Applikation anzupassen:
Dockerfile-Pfad
Standardmässig verwendet Deploio das Dockerfile im Stammverzeichnis deines
Repositorys.
- Cockpit
- nctl
Nachdem du Dockerfile Build aktiviert hast, kannst du den Pfad im Feld Dockerfile Path angeben.
Verwende das Flag --dockerfile-path, um ein Dockerfile an einem anderen
Ort anzugeben: bash --dockerfile-path="path/to/Dockerfile"
Build-Context
Standardmässig setzt Deploio den Build-Context auf das Stammverzeichnis deines Repositorys.
- Cockpit
- nctl
Nachdem du Dockerfile Build aktiviert hast, kannst du das Verzeichnis im Feld Build Context angeben.
Verwende das Flag --dockerfile-build-context, um einen anderen Ort
anzugeben: bash --dockerfile-build-context="path/to/build/context/"
Build-Argumente
Du kannst Dockerfile Build-Argumente für deinen Build übergeben.
- Cockpit
- nctl
Füge deine Argumente im Bereich Build Environment Variables hinzu.
Verwende das Flag --build-env. Um beispielsweise ein ARG namens
APP_VERSION mit dem Wert "v0.0.1" zu definieren: bash --build-env=APP_VERSION=v0.0.1
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:
| Variable | Beschreibung | Build-Zeit | Laufzeit |
|---|---|---|---|
PORT | Der Port, auf dem deine App erreichbar ist. | — | ✓ |
DEPLOIO_APP_NAME | Der Name deiner Anwendung. | — | ✓ |
DEPLOIO_PROJECT_NAME | Der Name des Projekts, zu dem deine App gehört. | — | ✓ |
DEPLOIO_RELEASE_NAME | Der Name des aktuell aktiven Releases. | — | ✓ |
DEPLOIO_GIT_REVISION | Die 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
nctlundjqverwenden, 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 -