Starten eines Docker-Containers über die API
Voraussetzungen
Um einen benutzerdefinierten Docker-Container zu starten, benötigst du Folgendes:
- Die Projekt-ID eines bestehenden Projekts (wie man ein Projekt erstellt), in dem die Container-Hosting-Funktion verfügbar ist
- Ein Container-Image, das du starten möchtest. Dieses Image kann in jeder öffentlichen oder privaten Registry verfügbar sein; jedoch muss die Registry aus dem Internet erreichbar sein und darf nicht hinter einer Firewall verborgen sein.
Definieren einer privaten Registry (optional)
Wenn dein Container-Image aus einer privaten Registry geladen werden soll, musst du diese Registry zuerst für das jeweilige Projekt definieren.
Du kannst die folgenden API-Operationen verwenden, um Container-Registries zu verwalten:
- POST
/
um eine neue Container-Registry zu erstellenv2/ projects/ {projectId}/ registries/ - PATCH
/
um eine Container-Registry zu aktualisierenv2/ registries/ {registryId}/ - DELETE
/
um eine Registry zu löschenv2/ registries/ {registryId}/
Zum Beispiel kannst du die POST/
-Operation verwenden, um diese neue Registry zu definieren:
POST /v2/projects/{projectId}/registries HTTP/1.1
Host: api.mittwald.de
Content-Type: application/json
{
"credentials": {
"password": "password",
"username": "username"
},
"description": "Meine Registry",
"uri": "my-registry.example"
}
/v2/projects/{projectId}/registries/
Nachdem eine Container-Registry für ein Projekt konfiguriert wurde, kannst du sie einfach innerhalb dieses Projekts verwenden, indem du den Namen des Images mit jeweiligen Präfix der Registry versiehst, genau wie bei einem docker run
-Befehl.
Starten eines Containers im Standard-Stack
Container werden als Teil eines Container-Stacks ausgeführt. Ein Container-Stack ist eine Sammlung von Containern und Volumes, die zusammen ausgeführt werden. Du kannst die folgenden API-Operationen verwenden, um Container-Stacks zu verwalten:
- GET
/
um verfügbare Stacks aufzulisten (verwende denv2/ projects/ {projectId}/ stacks/ default
Stack) - PUT
/
um den gewünschten Zustand eines Container-Stacks zu deklarieren; diese Operation ist idempotent und kann verwendet werden, um Container und Volumes zu einem Stack hinzuzufügen/aktualisieren oder zu entfernenv2/ stacks/ {stackId}/
Identifizieren des Standard-Stacks
Bevor du einen Container im Standard-Stack startest, musst du die ID des Standard-Stacks ermitteln. Dazu listest du die verfügbaren Stacks in deinem Projekt auf, indem du den GET/
-Endpunkt aufrufst. Der Standard-Stack wird default
genannt.
Definieren des Container-Stacks
Nachdem du den Standard-Stack ermittelt hast, kannst du definieren, welche Container und Volumes du in diesem Stack erstellen möchtest. Das folgende Beispiel zeigt eine Beispielanfrage, die einen Container mit einem Volume startet:
PUT /v2/stacks/{stackId} HTTP/1.1
Host: api.mittwald.de
Content-Type: application/json
{
"services": {
"mycontainer": {
"image": "my-registry/my-container:v1.0.1",
"volumes": [
"myvolume:/var/www"
],
"command": [
"command"
],
"entrypoint": [
"/entrypoint.sh"
],
"environment": {
"FOO": "bar"
}
}
},
"volumes": {
"myvolume": {}
}
}
/v2/stacks/{stackId}/
Siehe die Dokumentation zu Container-Workloads für weitere Informationen darüber, wie Container, Volumes und Netzwerke definiert werden.
Starten eines neuen Container-Stacks (geplant)
Das Starten neuer Container-Stacks neben dem Standard-Stack wird momentan nicht unterstützt.
Verbinden von Domains mit Containern
Um eine Domain mit einem laufenden Container zu verbinden, kannst du den Container als Ziel einer Ingress-Ressource angeben. Verwende die folgende API-Operation, um ein Ingress zu erstellen, das mit einem Container verbunden ist:
- POST
/
um eine Domain mit einem Container zu verbindenv2/ ingresses/
Betrieb von Containern
Um den Lebenszyklus eines Container-Stacks zu verwalten, kannst du die folgenden API-Operationen verwenden:
- POST
/
um einen Dienst in einem Container-Stack zu stoppenv2/ stacks/ {stackId}/ services/ {serviceId}/ actions/ stop/ - POST
/
um einen Dienst in einem Container-Stack zu startenv2/ stacks/ {stackId}/ services/ {serviceId}/ actions/ start/ - GET
/
um auf den STDOUT-Stream eines Dienstes in einem Container-Stack zuzugreifenv2/ stacks/ {stackId}/ services/ {serviceId}/ logs/