Dockerfile Build
Mit Dockerfile-Builds kann Deploio jede App erstellen, die mit einem Dockerfile gebaut werden kann. Dies ist besonders nützlich, wenn Ihre 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 Ihr Repository
ein Dockerfile enthält und dass Sie 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
- Öffnen Sie die Applikation erstellen-Seite.
- Geben Sie Ihre Repository-Details an.
- Aktivieren Sie den Schalter Dockerfile Build.
Sie können die Beispiel-App mit nctl erstellen:
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 Ihnen, verschiedene Aspekte Ihrer Dockerfile-basierten Applikation anzupassen:
Dockerfile-Pfad
Standardmässig verwendet Deploio das Dockerfile im Stammverzeichnis Ihres
Repositorys.
- Cockpit
- nctl
Nachdem Sie Dockerfile Build aktiviert haben, können Sie den Pfad im Feld Dockerfile Path angeben.
Verwenden Sie das Flag --dockerfile-path, um ein Dockerfile an einem anderen Ort anzugeben:
--dockerfile-path="path/to/Dockerfile"
Build-Context
Standardmässig setzt Deploio den Build-Context auf das Stammverzeichnis Ihres Repositorys.
- Cockpit
- nctl
Nachdem Sie Dockerfile Build aktiviert haben, können Sie das Verzeichnis im Feld Build Context angeben.
Verwenden Sie das Flag --dockerfile-build-context, um einen anderen Ort anzugeben:
--dockerfile-build-context="path/to/build/context/"
Build-Argumente
Sie können Dockerfile Build-Argumente für Ihren Build übergeben.
- Cockpit
- nctl
Fügen Sie Ihre Argumente im Bereich Build Environment Variables hinzu.
Verwenden Sie das Flag --build-env. Um beispielsweise ein ARG namens APP_VERSION mit dem Wert "v0.0.1" zu definieren:
--build-env=APP_VERSION=v0.0.1
Runtime und Health-Checks
Die Deploio-Runtime verwendet den im Dockerfile angegebenen ENTRYPOINT und
CMD, um Ihre Anwendung zu starten.
Um Ihrer 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 Sie werden 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 finden Sie in den offiziellen Docker Best Practices.
- Versuchen Sie die Grösse Ihres Images zu minimieren, um schnellere Builds, schnellere Releases und eine verringerte Angriffsfläche zu erreichen.
- Verwenden Sie Multi-Stage-Builds für kompilierte Sprachen, wann immer dies möglich ist.
Einschränkungen
Bitte beachten Sie die folgenden Einschränkungen:
-
Es ist derzeit nicht möglich, eine bestehende Applikation, welche Buildpacks verwendet, direkt in eine Dockerfile-basierte Applikation umzuwandeln. Sie müssen eine neue Applikation erstellen, um Dockerfile-Builds zu nutzen.
Sie können
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 -