Zum Inhalt springen

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

betriebsblatt.diff
Zeilen
+14−14
Abschnitte
7

Auszug aus Dockerfile und docker-compose.yml dieser Website, gekürzt. Die erste Zeile ist ein Beispielbefehl.

Ansicht
  1. Beispielbefehl

    docker run -p 3000:3000 anwendung

    00

    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.

  2. docker-compose.yml

    services:  app:    restart: unless-stopped

    01

    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.

  3. 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.

  4. docker-compose.yml

      nginx:    image: nginx:1.29-alpine    depends_on:      app:        condition: service_healthy

    03

    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.

  5. 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.

  6. docker-compose.yml

      app:    env_file: .env.production

    05

    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.

  7. Dockerfile

    COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile

    06

    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.

  8. Dockerfile

    WORKDIR /appRUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjsUSER nextjs

    07

    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

  1. 01Umzug von Vercel oder Shared Hosting auf einen eigenen Server
  2. 02Betrieb eines Kundenportals mit mehreren Diensten
  3. 03Staging-Umgebung für Abnahmen vor dem Livegang
  4. 04Wiederherstellung nach Ausfall oder Fehlkonfiguration
  5. 05Übergabe an ein internes Team oder einen Dienstleister

Passende Angebote

In diesen Angeboten kommt Docker zum Einsatz.

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.