12 KiB
Container-Management
Übersicht
Diese Kategorie umfasst alle Playbooks und Rollen zur Docker-Container-Verwaltung, einschließlich Installation, Konfiguration, Bereinigung und Wartung.
Anwendungsfälle:
- Docker-Installation auf neuen Hosts
- Bereinigung ungenutzter Container und Images
- Verwaltung von Docker-Daemons
- Konfiguration von Image-Proxy/Mirror für schnellere Pulls
- Status-Überprüfung von Docker-Compose-Stacks
Playbooks
docker/install-docker.yml
Installation und Konfiguration von Docker aus offizieller Quelle.
Datei: playbooks/docker/install-docker.yml
Zweck: Installiert Docker Engine von der offiziellen Docker-Repository auf Debian-basierten Systemen.
Ziel-Hosts: all
Benutzer: tincadmin (mit sudo-Rechten)
Verwendete Rollen:
system(Task:install-docker.yaml)
Wichtige Variablen:
| Variable | Default | Beschreibung |
|---|---|---|
docker_install_source |
"official" |
Installationsquelle (official/tinc) |
Verwendungsbeispiel:
# Docker von offizieller Quelle installieren
ansible-playbook playbooks/docker/install-docker.yml \
-i inventories/icp-fra-pve1.yml \
-K
# Mit tinc-Mirror (schneller in internem Netzwerk)
ansible-playbook playbooks/docker/install-docker.yml \
-i inventories/icp-fra-pve1.yml \
-e "docker_install_source=tinc" \
-K
# Auf einzelnem Host
ansible-playbook playbooks/docker/install-docker.yml \
-i inventories/icp-fra-pve1.yml \
--limit newhost.example.com \
-K
Abhängigkeiten:
systemRolle- Internet-Zugriff oder tinc-Mirror-Zugriff
- APT-Paketmanager
Besonderheiten:
- Verwendet offizielle Docker-Registry standardmäßig
- Installiert Docker CE (Community Edition)
- Konfiguriert Docker-Daemon automatisch
- Aktiviert Docker-Service beim Systemstart
Workflow:
- Fügt Docker GPG-Key hinzu
- Konfiguriert Docker APT-Repository
- Aktualisiert APT-Cache
- Installiert Docker CE
- Startet und aktiviert Docker-Service
docker/cleanup-images.yml
Bereinigung ungenutzter Docker-Images.
Datei: playbooks/docker/cleanup-images.yml
Zweck: Entfernt ungenutzte Docker-Images um Festplattenspeicher freizugeben.
Ziel-Hosts: all
Benutzer: tincadmin (mit sudo-Rechten)
Verwendete Rollen:
docker(Tasks:get-containerstatus,cleanup-images)
Wichtige Variablen:
| Variable | Default | Beschreibung |
|---|---|---|
docker_compose_path |
/opt/mailcow-dockerized |
Pfad zum Docker-Compose-Projekt |
Verwendungsbeispiel:
# Cleanup für alle Hosts
ansible-playbook playbooks/docker/cleanup-images.yml \
-i inventories/icp-fra-pve1.yml \
-K
# Mit custom Compose-Pfad
ansible-playbook playbooks/docker/cleanup-images.yml \
-i inventories/extern.yml \
-e "docker_compose_path=/opt/my-app" \
-K
# Nur auf spezifischem Host
ansible-playbook playbooks/docker/cleanup-images.yml \
-i inventories/icp-fra-pve1.yml \
--limit mail-server-01.example.com \
-K
Abhängigkeiten:
- Docker-Installation
- Docker-Compose (falls Compose-Projekt)
Besonderheiten:
- Statischer Mailcow-Pfad - Standard ist
/opt/mailcow-dockerized - Entfernt nur ungenutzte Images (keine aktiven Container betroffen)
- Prüft Container-Status vor Cleanup
Workflow:
- Überprüft Status aller Container im Compose-Projekt
- Identifiziert ungenutzte Images
- Entfernt ungenutzte Images
- Gibt Speicherplatz frei
⚠️ Hinweis: Stopped Container und deren Images werden nicht entfernt. Nur vollständig ungenutzte Images.
docker/cleanup-all.yml
Vollständige Docker-Bereinigung (Container, Images, Volumes, Networks).
Datei: playbooks/docker/cleanup-all.yml
Zweck: Umfassende Bereinigung von Docker-Ressourcen auf Mailcow-Hosts, nur wenn alle Container laufen.
Ziel-Hosts: all (mit Mailcow)
Benutzer: tincadmin (mit sudo-Rechten)
Verwendete Rollen:
managed-mailcow(Task:find-mailcow-composedir)docker(Tasks:get-containerstatus,cleanup-all)
Wichtige Variablen:
| Variable | Beschreibung |
|---|---|
docker_compose_path |
Wird dynamisch aus Mailcow-Directory ermittelt |
Verwendungsbeispiel:
# Vollständiges Cleanup auf Mailcow-Hosts
ansible-playbook playbooks/docker/cleanup-all.yml \
-i inventories/extern.yml \
-K
# Mit Debug-Ausgabe
ansible-playbook playbooks/docker/cleanup-all.yml \
-i inventories/icp-fra-pve1.yml \
-v \
-K
Abhängigkeiten:
- Vorhandene Mailcow-Installation
- Alle Container müssen laufen (Sicherheitsbedingung)
Besonderheiten:
- Conditional Cleanup: Nur wenn alle Container aktiv sind
- Bedingung:
not 'false' in container_status.values() - Dynamische Pfaderkennung über
managed-mailcowRolle - Entfernt:
- Stopped Container
- Ungenutzte Images
- Ungenutzte Volumes
- Ungenutzte Networks
Workflow:
- Findet Mailcow-Compose-Directory
- Prüft Status aller Container
- Abbruch wenn Container nicht laufen
- Führt vollständiges Cleanup durch:
docker system prune -adocker volume prunedocker network prune
⚠️ Warnung: Dieses Playbook ist aggressiv und entfernt alle ungenutzten Ressourcen. Verwenden Sie es nur, wenn Sie sicher sind, dass alle gewünschten Container laufen.
Rollen
Rolle: docker
Zweck: Verwaltung von Docker-Containern, Images und Daemon-Konfiguration.
Pfad: roles/docker/
Hauptaufgaben:
1. install-docker.yml
Installiert Docker von offiziellem Repo oder tinc-Mirror.
Funktionen:
- Fügt Docker GPG-Signatur-Key hinzu
- Konfiguriert Docker APT-Repository
- Installiert Docker CE, CLI und containerd
- Konfiguriert Docker-Daemon mit Proxy (optional)
Variablen:
docker_install_source: "official" # oder "tinc"
2. cleanup-images.yml
Entfernt ungenutzte Docker-Images.
Funktionen:
- Verwendet
docker image prune -a - Bereinigt dangling Images
- Gibt Speicherplatz frei
Verwendung:
- include_role:
name: docker
tasks_from: cleanup-images.yml
3. cleanup-all.yml
Vollständige Bereinigung aller Docker-Ressourcen.
Funktionen:
- Entfernt stopped Container
- Löscht ungenutzte Images
- Bereinigt Volumes
- Entfernt ungenutzte Networks
Verwendung:
- include_role:
name: docker
tasks_from: cleanup-all.yml
4. get-containerstatus.yml
Prüft Status von Docker-Compose-Containern.
Funktionen:
- Liest
docker-compose ps - Erstellt Status-Dictionary
- Prüft ob Container running sind
Ausgabe:
container_status:
nginx-mailcow: true
mysql-mailcow: true
postfix-mailcow: false # nicht laufend
Verwendung:
- include_role:
name: docker
tasks_from: get-containerstatus.yml
vars:
docker_compose_path: /opt/mailcow-dockerized
5. restart-daemon.yml
Startet Docker-Daemon neu.
Funktionen:
- Reload systemd
- Restart Docker-Service
- Wartet auf Verfügbarkeit
Verwendung:
- include_role:
name: docker
tasks_from: restart-daemon.yml
Standard-Variablen:
Die Rolle selbst hat keine defaults/main.yml, aber verwendet Variablen aus group_vars/all.yml:
use_docker_image_mirror: true
docker_mirror_location: "SC" # oder "tinc"
docker_install_source: "official"
Abhängigkeiten (requirements.yml):
collections:
- name: community.docker
version: "3.11.0"
Installation:
ansible-galaxy collection install -r roles/docker/requirements.yml
Docker-Image-Proxy/Mirror
Konfiguration
Für schnellere Docker-Pulls in internen Netzwerken kann ein Image-Proxy konfiguriert werden.
Siehe auch: Mail-Server-Verwaltung → use-docker-image-proxy.yaml
Vorteile:
- Reduzierte Bandbreitennutzung
- Schnellere Image-Downloads
- Caching häufig genutzter Images
- Rate-Limit-Vermeidung bei Docker Hub
Konfiguration in group_vars/all.yml:
# Docker Mirror Configuration
use_docker_image_mirror: true
docker_mirror_location: "SC" # ServerCow Mirror
# Proxy Settings
docker_proxy_host: "dim.servercow.com"
docker_proxy_port: 3128
Best Practices
1. Regelmäßiges Cleanup
Führen Sie wöchentliches Image-Cleanup durch:
# Jeden Sonntag via Cron
0 2 * * 0 ansible-playbook /path/to/playbooks/docker/cleanup-images.yml \
-i /path/to/inventories/all.yml
2. Vor Major-Updates
Cleanup vor großen Updates für Speicherplatz:
ansible-playbook playbooks/docker/cleanup-all.yml \
-i inventories/icp-fra-pve1.yml \
-K
3. Image-Mirror verwenden
Nutzen Sie interne Mirrors für schnellere Pulls:
# In group_vars/all.yml
use_docker_image_mirror: true
docker_mirror_location: "tinc"
4. Container-Status überwachen
Vor Cleanup immer Container-Status prüfen:
# Manuell auf Host
docker ps -a
docker-compose ps
# Via Ansible
ansible all -i inventories/icp-fra-pve1.yml \
-m shell -a "docker ps --format '{{.Names}}: {{.Status}}'"
5. Speicherplatz-Monitoring
Überwachen Sie Docker-Speicherverbrauch:
# Auf Host
docker system df
# Via Ansible
ansible all -i inventories/icp-fra-pve1.yml \
-m shell -a "docker system df"
Fehlerbehebung
Problem: Docker-Installation schlägt fehl
Symptome: APT kann Docker-Repository nicht erreichen
Lösung:
- Überprüfen Sie Internet-Verbindung
- Testen Sie Repository-Erreichbarkeit:
curl -fsSL https://download.docker.com/linux/debian/gpg - Verwenden Sie tinc-Mirror als Alternative:
-e "docker_install_source=tinc"
Problem: Cleanup entfernt benötigte Images
Symptome: Nach Cleanup fehlen Images für laufende Container
Lösung:
- Dies sollte nicht passieren, da
cleanup-all.ymlnur bei laufenden Containern ausgeführt wird - Restore aus Backup oder re-pull Images:
cd /opt/mailcow-dockerized docker-compose pull docker-compose up -d
Problem: Kein Speicherplatz freigegeben
Symptome: docker system df zeigt immer noch hohe Nutzung
Lösung:
- Überprüfen Sie Volumes:
docker volume ls docker volume prune - Überprüfen Sie Build-Cache:
docker builder prune -a - Manuelle vollständige Bereinigung:
docker system prune -a --volumes
Problem: Docker-Daemon startet nicht
Symptome: systemctl status docker zeigt Failed
Lösung:
- Überprüfen Sie Logs:
journalctl -u docker.service -n 50 - Überprüfen Sie Daemon-Konfiguration:
cat /etc/docker/daemon.json - Starten Sie Daemon neu:
systemctl restart docker
Problem: Container-Status-Prüfung fehlgeschlagen
Symptome: get-containerstatus Task schlägt fehl
Lösung:
- Überprüfen Sie docker-compose.yml:
cd /opt/mailcow-dockerized docker-compose config - Überprüfen Sie ob Docker-Compose installiert ist:
docker-compose --version
Externe Abhängigkeiten
Community Docker Collection
Installation:
ansible-galaxy collection install community.docker:3.11.0
Dokumentation:
- https://docs.ansible.com/ansible/latest/collections/community/docker/
- https://galaxy.ansible.com/community/docker
Verwendete Module:
community.docker.docker_imagecommunity.docker.docker_containercommunity.docker.docker_prunecommunity.docker.docker_compose
Nützliche Kommandos
Docker-Informationen abrufen
# Speichernutzung
ansible all -i inventories/icp-fra-pve1.yml \
-m shell -a "docker system df -v" \
-b
# Laufende Container
ansible all -i inventories/icp-fra-pve1.yml \
-m shell -a "docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'" \
-b
# Docker-Version
ansible all -i inventories/icp-fra-pve1.yml \
-m shell -a "docker version --format '{{.Server.Version}}'" \
-b
Manuelle Bereinigung
# Auf spezifischem Host
ssh tincadmin@host.example.com
sudo docker system prune -a --volumes
sudo docker image ls
sudo docker volume ls
Navigation: ← Zurück: Monitoring | Nächstes: Mail-Server-Verwaltung →