Docker
Produção
Imagens
Segurança
DevOps
Containerização

Docker für die Produktion: Leichte und sichere Images erstellen

Docker für die Produktion: Leichte und sichere Images erstellen

Docker hat die Softwarebereitstellung verändert, aber die Verwendung von Containern in der Produktion erfordert Disziplin. Große Images erhöhen die Speicherkosten und Bereitstellungszeiten, während Schwachstellen Ihre Umgebung anfällig für Angriffe machen können. In diesem Leitfaden werden Best Practices vorgestellt, die schlanke, sichere und versionierbare Images gewährleisten.

Wesentliche bewährte Praktiken

  • Mehrstufige Builds, kompilieren Sie den Code in einer Phase und kopieren Sie nur die endgültigen Artefakte.
  • Minimalistische Basisbilder, bevorzugen Sie alpine oder distroless, um die Angriffsfläche zu verringern.
  • Niemals Anmeldeinformationen angeben, .env Dateien, Schlüssel oder Token sollten niemals in das Image kopiert werden.
  • Als Nicht-Root-Benutzer ausführen, einen dedizierten Benutzer erstellen und den Container für die Verwendung konfigurieren.
  • Version ohne latest, verwenden Sie semantische Tags (v1.2.3) für Rückverfolgbarkeit und Rollback.

Schlankes Beispiel einer mehrstufigen Docker-Datei (Node.js), 9 Zeilen

FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # gera artefatos estáticos FROM gcr.io/distroless/nodejs20 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER nonroot EXPOSE 3000 CMD ["dist/index.js"]

Checkliste zur Bildsicherheit

  • Schwachstellen scannen mit Trivy, Clair oder Snyk.
  • Überprüfen Sie unnötige Ebenen (docker history).
  • Nicht-Root-Benutzer in Dockerfile definieren.
  • Temporäre Dateien entfernen (npm cache clean --force).
  • Signieren Sie das Image mit Docker Content Trust, um die Integrität sicherzustellen.

Versionierungsstrategie

| Tag | Wann sollte | verwendet werden? |---|---| | v1.2.3 | Stabile Freigabe, kompatibel mit Semver. | | v1.2.3-rc.1 | Release-Kandidat zum Testen. | | v1.2.3-sha.<commit> | Automatisierter Build für CI, nachvollziehbar. |

Vereinfachte CI/CD-Integration (GitHub Actions), 7 Zeilen

name: Build & Push Docker Image on: push: branches: [main] jobs: docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build image run: docker build -t myapp:$ . - name: Login to Docker Hub uses: docker/login-action@v2 with: username: $ password: $ - name: Push image run: docker push myapp:$

Fazit

Durch die Anwendung dieser Vorgehensweisen erhalten Sie kleinere, sicherere und leichter versionierbare Images, wodurch die Betriebskosten gesenkt und das Risiko von Schwachstellen in der Produktion gemindert werden.


Welche Docker-Strategien haben Sie bereits übernommen? Teilen Sie es in den Kommentaren!

Lesen Sie auch