Zurück
14/08/2025
Da ich selbst wieder mehr mit Wordpress arbeite, hatte ich sofort das Verlangen mir eine Docker-Compose Datei zu erstellen, um schnell loslegen zu können - egal ob lokal oder auf einem VPS. In diesem kurzen Guide möchte ich zeigen, wie eine WordPress-Installation mit Docker Compose funktioniert, und genau erklären, auf was es ankommt!
Für jeden, der einfach "nur" loslegen möchte, kommt im Folgenden das Minimalste, was benötigt wird, um loszulegen. Dabei werden genau zwei Services benötigt. Einmal das Wordpress-Image selbst und eine Datenbank, um die erstellten Inhalte zu speichern. Wichtig ist hierbei zu beachten, dass der WordPress-Service die gleichen Zugangsdaten benötigt, die im Datenbank-Service unter MYSQL_USER bzw. MYSQL_PASSWORD gesetzt werden.
services:
wordpress:
image: wordpress
container_name: wordpress
restart: unless-stopped
ports:
- "3000:80"
environment:
WORDPRESS_DB_HOST: wordpress-db
WORDPRESS_DB_USER: exampleuser # Benutzer eingeben
WORDPRESS_DB_PASSWORD: examplepass # Passwort eingeben
WORDPRESS_DB_NAME: wordpress
volumes:
- ./app:/var/www/html
wordpress-db:
image: mysql
container_name: wordpress-db
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: exampleuser # Selben Benutzer eingeben
MYSQL_PASSWORD: examplepass # Selbes Passwort eingeben
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./mysql_data:/var/lib/mysql
volumes:
mysql_data:Nachdem alles in einer docker-compose.yml gespeichert wurde, können die Services gestartet werden. Dies geschieht mit folgendem Befehl.
docker compose up -dDamit starten alle Services im Hintergrund und Wordpress ist nun unter http://localhost:3000 erreichbar.
Nachdem wir ein minimales Setup eingerichtet und erfolgreich gestartet haben, möchte ich nun näher auf die einzelnen Konfigurationen der Services eingehen. Damit soll ein besseres Verständnis entstehen, was wirklich in der docker-compose.yml-Datei passiert.
Der wordpress-Service ist das Herzstück unserer Anwendung. Er basiert auf dem offiziellen wordpress-Docker-Image, das eine vorkonfigurierte Umgebung für WordPress bereitstellt.
image: wordpress: Verwendet das offiziele WordPress-Docker-Image.container_name: wordpress: Weist dem Container einen festen Namen zu.restart: unless-stopped: Der Container startet automatisch neu, außer er wurde explizit gestoppt.ports: - "3000:80": Ordnet den Port 80 im Container dem Port 3000 auf deinem Host-System zu, sodass WordPress über http://localhost:3000 erreichbar ist.environment: Wichtig für die Datenbankverbindung und WordPress-Initialisierung:
WORDPRESS_DB_HOST: wordpress-db: Hostname der Datenbank (durch Docker Compose einfach der Servicename).WORDPRESS_DB_USER: exampleuser und WORDPRESS_DB_PASSWORD: examplepass: Datenbank-Zugangsdaten, die mit dem wordpress-db-Service übereinstimmen müssen.WORDPRESS_DB_NAME: wordpress: Der Name der Datenbank.volumes: - ./app:/var/www/html: Bindet das lokale Verzeichnis ./app an das Verzeichnis /var/www/html im Container, um WordPress-Dateien persistent zu speichern.Der wordpress-db-Service stellt die notwendige MySQL-Datenbank für WordPress bereit.
image: mysql: Verwendet das offizielle MySQL-Docker-Image.container_name: wordpress-db: Gibt dem Datenbank-Container einen festen Namen.restart: unless-stopped: Der Container startet automatisch neu, außer er wurde explizit gestoppt.environment: Konfiguriert die MySQL-Datenbank:
MYSQL_DATABASE: wordpress: Der Datenbankname.MYSQL_USER: exampleuser und MYSQL_PASSWORD: examplepass: Datenbank-Benutzerdaten, die mit dem WordPress-Service übereinstimmen müssen.MYSQL_RANDOM_ROOT_PASSWORD: '1': Generiert ein zufälliges Root-Passwort für MySQL.volumes: - ./mysql_data:/var/lib/mysql: Persistiert die Datenbankdaten, indem das lokale Verzeichnis ./mysql_data an das Datenverzeichnis von MySQL im Container gebunden wird.Die Verwendung von Volumes ist entscheidend, um sicherzustellen, dass deine Daten wie z.B. WordPress-Dateien oder Datenbankinhalte auch nach dem Entfernen von Docker-Containern erhalten bleiben.
volumes:: Dieser Abschnitt deklariert die verwendeten "Named Volumes", wie hier mysql_data für die DatenbankNach einer kurzen Weile mit diesem Setup bin ich auf das erste Problem gestoßen. Beim Plugin-Upload wurde mir durch WordPress mitgeteilt, dass die aktuelle maximale Uploadgröße überschritten wurde und somit der Upload nicht funktioniert. Um diese Größe nun zu konfigurieren, muss eine uploads.ini-Datei erstellt und in das Konfigurationsverzeichnis von PHP gemountet werden. In diesem Beispiel habe ich die maximale Größe auf 256 MB gestellt.
file_uploads = On
upload_max_filesize = 256M
post_max_size = 256MNachdem die Datei in unserem aktuellen Arbeitsverzeichnis, dem Speicherort der docker-compose.yml, abgelegt wurde, kann nun im WordPress-Service ein zweites Volume zur Einbindung hinzugefügt werden. Dafür muss folgenden Zeile hinzugefügt werden.
volumes:
+ - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./app:/var/www/htmlNachdem der Service nun (neu)gestartet wurde, ist die Uploadgröße erfolgreich eingestellt. Dies kann einfach erneut mit dem Start-Befehl gemacht werden.
docker compose up -dMit diesem schnellen Setup lässt sich WordPress auf jeder Umgebung, die Docker Compose installiert hat, mühelos starten. Ich kann jedem nur wärmstens empfehlen, sich ein wenig mit Docker und Docker Compose zu beschäftigen, da es so viele Vorteile mit sich bringt.
In meinem nächsten Beitrag zeige ich dann, wie der WordPress-Service beispielsweise über eine Domain erreichbar und mit einem SSL-Zertifikat abgesichert werden kann.