by Tayfun Özdemir
Share
WordPress Docker ist die schnellste Art, eine WordPress-Seite reproduzierbar aufzusetzen: Eine Datei beschreibt Webserver, PHP und Datenbank, ein Befehl startet alles. Damit aus der schnellen Testumgebung ein stabiler Betrieb wird, braucht es aber ein paar Regeln. In diesem Beitrag zeigen wir den Schnellstart mit Docker Compose und die Best Practices, die wir selbst im Betrieb von Container-Umgebungen anwenden.
Warum WordPress Docker statt klassischer Installation?
Bei einer klassischen Installation hängen PHP-Version, Webserver und Datenbank direkt am Betriebssystem. Jedes Update kann Nebenwirkungen haben, und die Testumgebung sieht selten genauso aus wie der Live-Server. Ein WordPress Docker Setup trennt das sauber:
- Gleiche Umgebung überall: Laptop, Testserver und Produktion laufen mit denselben Images.
- Schneller Wechsel: Eine neue PHP-Version ist ein geänderter Image-Tag, kein Umbau des Servers.
- Klare Trennung: Programmcode steckt im Image, Ihre Daten liegen in Volumes. Das macht Backups und Umzüge planbar.
- Mehrere Seiten auf einem Server: Jede Seite bekommt eigene Container, ohne sich gegenseitig zu stören.
Schnellstart: WordPress Docker Compose in 5 Minuten
Voraussetzung ist eine aktuelle Installation von Docker Engine mit dem Compose-Plugin (Befehl docker compose), unter Windows und macOS zum Beispiel über Docker Desktop. Wir nutzen das offizielle WordPress-Image und das offizielle MariaDB-Image von Docker Hub.
Schritt 1: Passwörter in eine .env-Datei
Legen Sie einen neuen Ordner an und darin die Datei .env. Docker Compose liest sie automatisch ein. Zufällige Passwörter erzeugen Sie zum Beispiel mit openssl rand -base64 24.
DB_PASSWORD=hier-ein-langes-zufallspasswort
DB_ROOT_PASSWORD=hier-ein-zweites-zufallspasswort
Schritt 2: PHP-Limits in uploads.ini
Die Standardgrenze für Uploads ist für viele Themes und Bilder zu klein. Diese Datei hebt sie an:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
Schritt 3: Die compose.yaml
Das ist das Herzstück Ihrer WordPress Docker Umgebung. Die Datei enthält bereits die wichtigsten Best Practices, die wir weiter unten erklären:
x-wp-db: &wp-db
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
services:
db:
image: mariadb:11.4
restart: unless-stopped
environment:
MARIADB_DATABASE: wordpress
MARIADB_USER: wordpress
MARIADB_PASSWORD: ${DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
wordpress:
image: wordpress:php8.3-apache
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment: *wp-db
volumes:
- wp_data:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
ports:
- "8080:80"
logging:
options:
max-size: "10m"
max-file: "3"
wpcli:
image: wordpress:cli-php8.3
user: "33:33"
profiles: ["tools"]
environment: *wp-db
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
Schritt 4: Starten
mkdir wordpress-docker && cd wordpress-docker
# .env, uploads.ini und compose.yaml anlegen (siehe oben)
docker compose up -d
docker compose ps
Nach wenigen Sekunden ist WordPress unter http://localhost:8080 erreichbar und zeigt den Installationsassistenten. Das war es schon: Ihre WordPress Docker Umgebung läuft.
10 Best Practices für WordPress Docker im Betrieb
1. Image-Versionen fest pinnen
Die wichtigste Regel für WordPress Docker im Live-Betrieb: Verwenden Sie nie latest. Sonst bekommen Sie beim nächsten docker compose pull unter Umständen eine neue PHP- oder Datenbank-Hauptversion, ohne es zu merken. Tags wie wordpress:php8.3-apache und mariadb:11.4 halten die Hauptversion fest und liefern trotzdem Sicherheitsupdates.
2. Passwörter nicht in die Compose-Datei schreiben
Zugangsdaten gehören in die .env-Datei, und diese gehört in die .gitignore. Für höhere Ansprüche unterstützen beide offiziellen Images Docker Secrets: Variablen mit der Endung _FILE, zum Beispiel WORDPRESS_DB_PASSWORD_FILE, lesen das Passwort aus einer Datei statt aus der Umgebung.
3. Daten in Volumes, nicht im Container
Bei WordPress Docker gilt: Container sind austauschbar, Ihre Inhalte nicht. Die Datenbank liegt im Volume db_data, die WordPress-Dateien mit Uploads, Themes und Plugins in wp_data. Wichtig zu wissen: Das offizielle Image kopiert WordPress nur beim ersten Start in das leere Volume. Ein neueres Image aktualisiert danach PHP und Apache, den WordPress-Core aktualisieren Sie weiter über das Dashboard oder WP-CLI.
4. Healthchecks statt Wartezeit
Der häufigste Fehler beim ersten Start ist „Error establishing a database connection“, weil WordPress schneller hochfährt als die Datenbank. Der Healthcheck in der Compose-Datei und condition: service_healthy sorgen dafür, dass WordPress erst startet, wenn MariaDB wirklich bereit ist.
5. Datenbank nie nach außen öffnen
Der Dienst db hat bewusst keinen ports-Eintrag. WordPress erreicht die Datenbank über das interne Docker-Netzwerk unter dem Namen db. Ein offener Port 3306 im Internet ist eine der ersten Stellen, an denen automatisierte Angriffe ansetzen.
6. HTTPS über einen Reverse Proxy
Für den Live-Betrieb setzen Sie einen Reverse Proxy wie Caddy oder Traefik vor WordPress. Beide holen sich automatisch Let’s-Encrypt-Zertifikate. Mit Caddy reicht diese Konfiguration:
example.de {
reverse_proxy wordpress:80
}
Der Port 8080 am WordPress-Container entfällt dann, nur der Proxy lauscht auf 80 und 443. Das offizielle WordPress-Image wertet den Header X-Forwarded-Proto des Proxys aus, damit WordPress HTTPS korrekt erkennt und keine Weiterleitungsschleifen entstehen.
7. WP-CLI als eigener Container
Mit WP-CLI erledigen Sie Updates, Suchen-und-Ersetzen bei Domainwechseln und Wartungsaufgaben ohne Dashboard. Der Dienst wpcli in der Compose-Datei startet nur bei Bedarf (Profil tools). Die Angabe user: "33:33" verhindert Rechteprobleme, weil das CLI-Image sonst mit einer anderen Benutzer-ID schreibt als der Apache-Container.
docker compose run --rm wpcli wp core version
docker compose run --rm wpcli wp plugin update --all
docker compose run --rm wpcli wp search-replace 'http://localhost:8080' 'https://example.de'
8. Backups automatisieren und testen
Ein WordPress Docker Backup besteht aus zwei Teilen: dem Datenbank-Dump und den Dateien im Volume. Beides lässt sich per Cronjob auf dem Host automatisieren. Legen Sie die Sicherungen außerhalb des Servers ab und spielen Sie regelmäßig eine Wiederherstellung durch. Ein Backup, das nie getestet wurde, ist nur eine Hoffnung.
# Datenbank sichern
docker compose exec db sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" wordpress' > backup-$(date +%F).sql
# Dateien (Uploads, Themes, Plugins) sichern
docker run --rm -v wordpress-docker_wp_data:/data -v "$PWD":/backup alpine \
tar czf /backup/wp-files-$(date +%F).tar.gz -C /data .
Der Volume-Name setzt sich aus Ordnername und Volume zusammen. Mit docker volume ls sehen Sie den genauen Namen.
9. Updates in einem festen Rhythmus
Neue Images bringen Sicherheitsupdates für PHP, Apache und MariaDB. Drei Befehle reichen, am besten einmal pro Woche und vorher mit frischem Backup:
docker compose pull
docker compose up -d
docker image prune -f
Plugins und Themes aktualisieren Sie weiter in WordPress oder per WP-CLI. Die Docker-Images ersetzen keine WordPress-Updates.
10. Logs begrenzen und überwachen
Ohne Grenze wachsen Container-Logs, bis die Festplatte voll ist. Die Option logging in der Compose-Datei begrenzt das auf drei Dateien mit je 10 MB. Zusätzlich sollte ein Monitoring prüfen, ob die Seite erreichbar ist, das Zertifikat gültig bleibt und genügend Speicher frei ist. Ausführliche Grundlagen zu Compose finden Sie in der Dokumentation von Docker.
WordPress Docker: Entwicklung und Produktion im Vergleich
Dieselbe Compose-Datei taugt für beide Zwecke, mit ein paar Unterschieden:
| Thema | Lokale Entwicklung | Produktion |
|---|---|---|
| Erreichbarkeit | Port 8080 auf localhost | Nur über Reverse Proxy mit HTTPS |
| Passwörter | .env-Datei | .env mit strengen Rechten oder Docker Secrets |
| Theme-Entwicklung | Theme-Ordner als Bind-Mount einbinden | Theme im Volume oder im eigenen Image |
| Backups | Optional | Täglich, extern gelagert, Wiederherstellung getestet |
| Debugging | WORDPRESS_DEBUG: 1 |
Aus, Fehler nur ins Log |
Typische Fehler und schnelle Lösungen
- Seite leitet nach dem Umzug auf localhost um: Die alte Adresse steht noch in der Datenbank. Lösung:
wp search-replaceper WP-CLI, wie oben gezeigt. - Uploads schlagen fehl: Meist fehlt die
uploads.ini, oder sie wurde nach dem Start angelegt. Danachdocker compose up -d --force-recreate wordpressausführen. - Plugins lassen sich nicht installieren: Dateirechte im Volume stimmen nicht. Die Dateien müssen dem Benutzer
www-data(ID 33) gehören. - Alle Daten weg nach
docker compose down -v: Die Option-vlöscht die Volumes. Im Alltag nurdocker compose downverwenden.
Häufige Fragen zu WordPress Docker
Ist WordPress Docker für den Live-Betrieb geeignet?
Ja, wenn die Best Practices umgesetzt sind: feste Versionen, HTTPS, geschlossene Datenbank, regelmäßige Updates und getestete Backups. Viele Hosting-Anbieter betreiben WordPress intern genau so.
Apache- oder FPM-Image?
Das Apache-Image ist der einfachste Einstieg, weil Webserver und PHP in einem Container laufen und .htaccess-Regeln von Plugins direkt funktionieren. Die FPM-Variante braucht zusätzlich einen Nginx-Container und lohnt sich vor allem bei hohem Traffic oder wenn Sie Nginx ohnehin einsetzen.
Brauche ich für WordPress gleich Kubernetes?
Für eine einzelne Seite oder ein paar Seiten nicht. Docker Compose auf einem gut gewarteten Server reicht hier völlig. Kubernetes lohnt sich, wenn viele Anwendungen hochverfügbar und automatisch skaliert laufen sollen. Warum Kubernetes-Betrieb und -Upgrades Erfahrung brauchen, lesen Sie in unserem Beitrag zum Kubernetes-Release v1.36.
Wie ziehe ich eine bestehende Seite in eine WordPress Docker Umgebung um?
Sie exportieren die Datenbank und den Ordner wp-content, starten die Docker-Umgebung, importieren den Dump in den Datenbank-Container und kopieren wp-content in das Volume. Anschließend passen Sie die Adresse per wp search-replace an, falls sich die Domain ändert.
WordPress Docker Betrieb ohne eigenen Aufwand
Der Schnellstart ist in fünf Minuten erledigt. Der Aufwand steckt im laufenden Betrieb: Updates, Backups, Zertifikate, Monitoring und schnelle Hilfe, wenn doch etwas klemmt. Genau das übernehmen wir als Managed IT-Services, inklusive IT-Sicherheit und Betreuung durch zertifizierte Kubernetes-Administratoren (CKA, CKS). Wer sich gar nicht selbst um Server kümmern möchte, findet bei uns passendes WordPress Hosting mit Updates und Backups.
Sie möchten WordPress mit Docker betreiben oder Ihre bestehende Seite umziehen? Wir prüfen Ihre Umgebung in einem kostenlosen Erstgespräch und zeigen Ihnen den einfachsten Weg. Jetzt Kontakt aufnehmen oder anrufen unter 02251 1297351.
bLeiben Sie informiert



