Infrastructure as Code (IaC) ist ein zentraler Ansatz in modernen DevOps- und Container-Umgebungen. Durch die Versionierung von Docker Setups mit Git lassen sich Container-Stacks reproduzierbar, nachvollziehbar und einfach auf unterschiedlichen Servern bereitstellen. Dies erhöht die Stabilität, erleichtert Teamarbeit und ermöglicht schnelle Rollbacks bei Problemen.
Docker Setups versionieren: Grundprinzipien
Bei IaC für Docker werden alle Konfigurationen, wie Docker Compose Dateien, Dockerfiles, Umgebungsvariablen und Skripte, in einem Git-Repository abgelegt. Jede Änderung wird versioniert und dokumentiert, wodurch Teams konsistente Deployments sicherstellen können.
Best Practices für Repository-Struktur
- docker-compose.yml: Haupt-Compose-Datei für Services, Netzwerke und Volumes.
- Dockerfiles: Container-Images für eigene Services.
- .env-Dateien: Umgebungsvariablen, die nicht direkt in Git gespeichert werden sollten, z. B. Secrets.
- scripts/: Hilfsskripte für Backup, Migration oder Monitoring.
- README.md: Dokumentation des Setups und Hinweise zur Nutzung.
Git für Docker Deployments nutzen
Git bietet die Möglichkeit, Änderungen nachvollziehbar zu speichern, Branches für Entwicklung und Produktion zu nutzen und bei Bedarf zu einem stabilen Stand zurückzukehren.
Typischer Workflow
# Repository initialisieren
git init
Dateien hinzufügen
git add docker-compose.yml Dockerfile .env README.md
Commit mit Nachricht
git commit -m "Initial Docker Compose setup for project"
Remote hinzufügen (GitHub, GitLab, etc.)
git remote add origin git@github.com:user/project.git
git push -u origin main
Branch-Strategien für IaC
Branches ermöglichen parallele Entwicklungen und sichere Integration neuer Features.
- main/master: Stabile Produktionsumgebung.
- develop: Integration von Features und Testing.
- feature/*: Neue Services, Optimierungen oder Experimente.
- hotfix/*: Dringende Korrekturen in Produktion.
Beispiel Merge Workflow
# Auf develop wechseln
git checkout develop
Feature-Branch mergen
git merge feature/new-service
Tests durchführen und dann auf main mergen
git checkout main
git merge develop
git push origin main
Versionierung von Docker Compose Templates
Durch die Versionierung von Compose Templates können Teams Stacks wiederholt reproduzieren und Änderungen nachvollziehen. Änderungen an Services, Images oder Netzwerken werden im Commit dokumentiert.
Variablen und Overrides versionieren
Um Umgebungen wie dev, stage und prod zu unterscheiden, werden Override-Files und .env-Dateien genutzt:
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d
- docker-compose.override.yml: Enthält Umgebungs-spezifische Anpassungen, Ports und Features.
- .env: Stellt Umgebungsvariablen bereit, die in Compose referenziert werden.
Rollback und History
Die Versionierung mit Git ermöglicht Rollbacks bei Fehlern oder unerwartetem Verhalten.
Rollback auf einen früheren Commit
# Commit-History ansehen
git log --oneline
Auf einen stabilen Commit zurücksetzen
git checkout
Optional neuen Branch für Tests
git checkout -b rollback-test
CI/CD Integration
Git-Repositories dienen als zentrale Quelle für CI/CD-Pipelines, die automatisiert Container bauen, testen und deployen.
Beispiel GitLab CI Job
stages:
- build
- deploy
build:
stage: build
script:
- docker-compose -f docker-compose.yml build
deploy:
stage: deploy
script:
- docker-compose -f docker-compose.yml up -d
only:
- main
Security und Secrets
Secrets und sensible Daten sollten nicht direkt in Git gespeichert werden. Nutzen Sie Docker Secrets oder externe Vault-Lösungen.
- Docker Secrets: Verwalten Passwörter, Tokens und Zertifikate sicher.
- .env-Dateien: Für lokale Entwicklung, niemals in Git einchecken.
- Vault oder HashiCorp: Zentrale Secret-Management-Lösung.
Monitoring und Dokumentation
Eine gute Dokumentation der IaC-Repository-Struktur erleichtert Teamarbeit und Onboarding neuer Mitglieder. Monitoring-Skripte können im Repository versioniert werden, um konsistente Alerts und Logging sicherzustellen.
Beispiel für Monitoring Script
#!/bin/bash
# Prüft, ob Container laufen
docker ps -a
Zeigt Logs der kritischen Container an
docker logs -f webapp
docker logs -f db
Fazit
Die Versionierung von Docker Setups mit Git ist ein essenzieller Schritt für stabile, nachvollziehbare und wiederholbare Deployments. Infrastructure as Code ermöglicht Teams, Änderungen sicher nachzuvollziehen, Umgebungen konsistent aufzubauen und Rollbacks bei Problemen durchzuführen. Durch die Kombination von Compose Templates, Overrides, CI/CD und sicheren Secret-Management-Lösungen entsteht eine solide Grundlage für professionelle Docker-Infrastrukturen.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.











