Docker & Betrieb
Ein produktionsreifer Code-Stand ist noch kein stabil betriebenes Produkt. Ein Auszug aus den Dateien dieser Website zeigt, was dazwischen liegt: Eine Zeile startet die Anwendung, die übrigen halten sie am Laufen.
Betriebsblatt, Zeile für Zeile
- Zeilen
- +14−14
- Abschnitte
- 7
Auszug aus Dockerfile und docker-compose.yml dieser Website, gekürzt. Die erste Zeile ist ein Beispielbefehl.
Beispielbefehl
docker run -p 3000:3000 anwendung00
Es läuft
So läuft die Anwendung auf dem Laptop, im Test und bei der Abnahme.
Das genügt nicht Besucher kommen zu jeder Zeit, und dafür reicht diese eine Zeile nicht.
docker-compose.yml
services: app: restart: unless-stopped01
Neustart ohne Zutun
Stürzt der Dienst ab oder startet der Server neu, kommt die Anwendung von selbst zurück. Nur ein bewusster Stopp hält sie an.
Ohne die Zeile Nach dem ersten Absturz bleibt der Dienst aus, bis es jemand bemerkt.
Dockerfile
EXPOSE 3000HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 CMD wget -qO- http://127.0.0.1:3000/api/health || exit 1CMD ["node", "server.js"]02
Selbstprüfung alle 30 Sekunden
Alle 30 Sekunden fragt die Anwendung bei sich selbst an, ob sie antwortet. Drei Fehlversuche nacheinander, und sie gilt als gestört.
Ohne die Zeile Docker sieht nur, dass ein Prozess läuft, nicht, ob er noch antwortet.
docker-compose.yml
nginx: image: nginx:1.29-alpine depends_on: app: condition: service_healthy03
Der Webserver wartet
Der Webserver nimmt erst Besucher an, wenn die Anwendung als gesund gemeldet ist.
Ohne die Zeile Solange die Anwendung noch startet, sehen Besucher Fehlerseiten.
docker-compose.yml
app: expose: - "3000" nginx: ports: - "80:80" - "443:443"04
Ein Eingang von außen
Von außen führt ein Weg zur Anwendung: der Webserver, auf Port 80 und, verschlüsselt, auf 443. Die Anwendung selbst hört nur im internen Netz.
Auf dem Server dieser Website, den sich mehrere Projekte teilen, übernimmt ein vorhandener Webserver diese Rolle. Der Container hört dort nur lokal.
Ohne die Zeile Jeder zusätzlich offene Port ist ein weiterer Weg, den jemand absichern muss.
docker-compose.yml
app: env_file: .env.production05
Geheimnisse außerhalb des Codes
Passwörter und Schlüssel stehen in einer eigenen Datei, die weder im Code-Repository noch im Image liegt.
Ohne die Zeile Passwörter müssten im Code oder im Image stehen.
Dockerfile
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile06
Jeder Bau gleicht dem letzten
Die Installation nimmt genau die Paketversionen aus der Sperrdatei. Passt die Datei nicht zum Projekt, bricht der Bau ab.
Ohne die Zeile Ein neuer Bau kann andere Paketversionen ziehen, und etwas verhält sich plötzlich anders.
Dockerfile
WORKDIR /appRUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjsUSER nextjs07
Kein Administrator im Container
Die Anwendung läuft unter einem eigenen Benutzer ohne Administratorrechte.
Ohne die Zeile Die Anwendung liefe als Administrator, und ein Fehler in ihr hätte im Container alle Rechte.
Ergebnis
Das System läuft weiter, auch wenn niemand danach schaut
Was in keiner Datei steht
3 Zusagen lassen sich nicht als Zeile schreiben. Festgehalten sind sie in der Dokumentation, die bei der Übergabe mitgeht.
- Rückweg
- Ein fehlerhaftes Update lässt sich in Minuten zurückrollen
- Dokumentiert
- Backups, Zertifikate und Zugänge sind eingerichtet und dokumentiert
- Übergabe
- Am Ende steht eine Übergabe mit allen Schlüsseln
LeitfadenWarum Betrieb zum Produkt gehört:Wann lohnt sich ein Kundenportal?
Typische Einsätze
- 01Umzug von Vercel oder Shared Hosting auf einen eigenen Server
- 02Betrieb eines Kundenportals mit mehreren Diensten
- 03Staging-Umgebung für Abnahmen vor dem Livegang
- 04Wiederherstellung nach Ausfall oder Fehlkonfiguration
- 05Übergabe an ein internes Team oder einen Dienstleister
Passende Angebote
In diesen Angeboten kommt Docker zum Einsatz.
- 04
Full-Stack Development
Eine Funktion, ein System, ein Verantwortlicher.
- 05
Portal & Individualsoftware
Aus Dienstleistung wird ein digitales Erlebnis.
- 06
Growth Partner
Ein digitaler Partner, der nach dem Launch bleibt.
Nächster Schritt
Erst das Vorhaben, dann der Stack.
Welche Technologie passt, ergibt sich erst am Ende. Im Erstgespräch von 15 Minuten zeigt sich, wo die Anwendung heute läuft und was ihr zum Weiterlaufen fehlt.
Oder direkt: info@coderconda.com