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
alpineoderdistroless, um die Angriffsfläche zu verringern. - Niemals Anmeldeinformationen angeben,
.envDateien, 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 /app/dist ./dist COPY /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
- Kubernetes in der Produktion: Was Ihnen niemand vor der Migration sagt
- Modernes CI/CD: Die Kunst, mit Zuversicht bereitzustellen
- Cloudflare Workers in der Produktion: Was sich nach Hello World ändert
- D1 in der Produktion: Leistung, Grenzen und was sich nicht alleine skalieren lässt
- Langlebige Objekte in der Produktion: Wie die Rechnung aussehen wird und welche Grenzen überraschen
- Implementierung von Feature-Flags und schrittweisen Rollouts in der Produktion
