WordPress im Docker-Container

Veröffentlicht in:
WordPress Logo

Wir erklären die Einrichtung einer WordPress-Installation in einem Docker-Container, als Host-Betriebssystem dient Ubuntu 25.04.

Um neue Funktionen, Templates oder Einstellungen für eine Website auszuprobieren eignet sich die Installation von WordPress in einem Docker-Container auf dem eigenen Computer besonders gut. Hat man einmal das Grundgerüst für den Container eingerichtet, kann man daraus in wenigen Schritten neue Container erstellen. Die Verwendung eines Containers erspart die sonst aufwändige Installation von Server, Datenbank und WordPress nebst deren Verknüpfung.

Um WordPress in einem Container einzurichten, wird in der Regel Docker Compose verwendet, Mit Compose definiert man eine Art Bauanleitung in Form einer Datei, in der die notwendigen Dienste (WordPress und eine Datenbank wie MySQL oder MariaDB) aufgelistet werden.

Erforderlich sind die nachfolgenden Schritte:

  1. Docker-Software installieren
  2. ein Verzeichnis für den neuen WordPress- Container einrichten
  3. die compose.yaml Datei erstellen
  4. Container starten

Schritt 1 – die Installation von Docker – haben wir im vorausgehenden Beitrag erklärt.

Docker Daemon starten

Um mit Docker arbeiten zu können muss der Docker-Daemon gestartet sein. Der Daemon ( Disk And Execution MONitor) ist ein Hintergrunddienst, eine Art Programm, das im Hintergrund läuft und verschiedene Aufgaben ausführt. Sie können prüfen, ob der Dienst läuft mit dem Befehl im Terminal:

systemctl status docker

In der Regel wird er beim Start des Computers automatisch mit gestartet.

Ansonsten starten Sie den Docker-Daemon in einem Terminal mit dem Befehl

sudo systemctl start docker

Zur Kontrolle nach einer Neu-Installation von Docker verwenden Sie einen Test-Container:

sudo docker run hello-world

Ein Verzeichnis anlegen

Erstellen Sie ein neues Verzeichnis in Ihrem Benutzerordner (Persönlicher Ordner) entweder über das Kontextmenü der Dateiverwaltung mit der Option „Neuer Ordner“ oder der Tastenkombination

Shift + Strg + N

Ubuntu Dateiverwaltung, das Kontextmenü ist geöffnet mit der Option: "Neuer Ordner".

oder in einem Terminal mit dem Befehl:

mkdir my-wp_1

Der Name des Verzeichnisses – hier als Beispiel my-wp_1 – ist frei wählbar. Er wird aber später zur Benennung von Container, Volumes und Netzwerk verwendet.

Docker Compose

Meist wird Docker-Compose als Plugin gleich zusammen mit der Docker-Engine installiert. Um dies zu prüfen, lassen Sie sich in einem Terminal die Version anzeigen mit dem Befehl :

docker compose version

Sollte es nicht vorhanden sein, installieren Sie das Plugin nachträglich:

sudo apt update<br>sudo apt install docker-compose-plugin

Die Compose Datei

Die Docker-Compose Datei definiert die Konfiguration für alle benötigten Dienste, wie verwendete Container-Images, Ports, Volumes und Netzwerke.

Eine Docker-Compose Datei für WordPress definiert typischerweise zwei Hauptdienste: einen für WordPress selbst und einen für eine Datenbank. In der Datenbank werden später alle Inhalte der Website, wie Seiten, Beiträge, Benutzerdaten und Einstellungen abgelegt.

Erstellen Sie in einem Texteditor eine Datei mit dem nachstehenden Inhalt und speichern diese unter dem Namen compose.yaml in dem neu erstellten Verzeichnis (my-wp_1).

# Datei: compose.yaml

services:
  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_ROOT_PASSWORD: rootpass
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    depends_on:
      - db
    volumes:
      - wp_content:/var/www/html/wp-content

volumes:
  db_data:
  wp_content:

Sie sehen hier services auf der ersten Ebene, ohne Einrückung, db und wordpress auf der zweiten Ebene, mit zwei Leerzeichen eingerückt. Diese werden dann auf der dritten und vierten Ebene konkret definiert. Mit image geben Sie vor, welches konkrete Container-Image vom Docker-Hub herunter geladen werden soll. Hier wird also Docker angewiesen, das aktuelle Container-Image von MariaDB und das von WordPress auf Ihren Computer zu laden (soweit es noch nicht vorliegt) und daraus jeweils einen Container zu bauen.

Die Anweisung restart: always bewirkt, dass der Container automatisch neu gestartet wird, sobald er beendet wurde, egal aus welchem Grund (manuelles Beenden, Neustart des Rechners oder Fehler).

Mit der environment – Anweisung werden Umgebungsvariablen festgelegt, die zur Laufzeit des Containers zur Verfügung stehen sollen. So sorgt z.B. das Datenbank-Passwort dafür, dass der WordPress-Container automatisch auf die Datenbank zugreifen kann.

Mit der Konfiguration von ports wird Port 80 im Container auf Port 8000 des Host-Computer verfügbar. Das wird als Port-Weiterleitung oder Port-Mapping bezeichnet. Dadurch kann man Port 80 von außerhalb des Containers erreichen. Die beiden Ports bilden eine Art Kommunikationsendpunkte, zwischen denen man eine Verbindung schafft, ein wenig wie ein virtuelles Kabel. Dabei dient die Port-Nummer dazu, dem Computer mitzuteilen, an welchen Service ein Datenpaket gesendet werden soll (vergleichbar einer Zimmernummer in einem Hotel). Hier also verbirgt sich hinter dem Port 80 der Service WordPress. Man kann über einen Browser unter Angabe des Ports 8000 auf WordPress im Container zugreifen.

Port 80 ist auf dem Host-Rechner möglicherweise bereits von anderen Anwendungen belegt. Um nicht mit einer existierenden Belegung auf dem Host zu kollidieren oder Sicherheitsbedenken einzugehen, ist es üblich hier einen anderen Port zu verwenden. Daher wählt man für die Verbindung mit dem Container-Port meist eine freie Port-Nummer im vierstelligen Bereich, z.B. 8080 oder 8000.

Grafik: Portmapping von Port 80 auf Port 8000.

Die Angabe volumes finden Sie zwei mal. Innerhalb der Service-Definition dient sie der Verknüpfung des Speicherortes im Container mit einem Verzeichnis außerhalb des Containers. Hier also var/lib/mysql im Container mit dem Verzeichnis db_data außerhalb des Containers auf dem Host-Rechner. Auf erster Ebene definiert sie ein benanntes Volume auf dem Host-Rechner. Auf Volumes gehen wir weiter unten noch näher ein.

Werden in der compose-Datei keine expliziten Angaben zum Netzwerk gemacht, erstellt Docker selbständig ein isoliertes Standard-Bridge-Netzwerk. Damit können die Container untereinander kommunizieren. In unserem Beispiel greift WordPress über dieses isolierte Netzwerk auf die Datenbank zu. Von außen ist dieses Standard- Netzwerk nicht zu erreichen

Exkurs: Version

In vielen Beispielen findet man in der ersten Zeile der Compose- Datei eine Versionsangabe, z.B.

version: 3.9

Seit Docker Compose Version V2 ist die Version-Zeile in der YAML-Datei optional. Das Schema richtet sich dann automatisch nach den verwendeten Features und wird intern geprüft.

Container Starten

Sie starten den Container in einem Terminal mit dem Befehl

sudo docker compose up -d
BefehlBedeutung
sudoden Befehl als Administrator ausführten
docker composeden Inhalt der Datei auswerten
upBefehl für den Start
-d„detached“: im Hintergrund ausführen, das Terminal kann geschlossen werden

Genau genommen werden mit dem Befehl

  • die Container-Images für die in der YAML-Datei bestimmten Services vom Docker-Hub heruntergeladen (soweit noch nicht auf dem Computer vorhanden),
  • aus dem Images Container erstellt (ein MariaDB- und ein WordPress-Container),
  • beide in einem gesonderten Netzwerk verbunden und schließlich
  • als Hintergrunddienst gestartet.

Hat alles funktioniert, sehen Sie im Terminal die Meldungen „Created“ für die Volumes und „Started“ für die Container.

Exkurs Compose Plugin:

In einigen Tutorials sehen Sie noch den Befehl

docker-compoe

Das ist der – veraltete – Befehl aus Version V1, einer „Standalone“-Version.

Aktuelle Installationen mit Version V2 nutzen das integrierte Docker Compose Plugin, einer Erweiterung des Docker CLI (Command Line Interface).

Der aktuelle Befehl hat keinen Bindestrich, also:

docker compose

WordPress starten

Rufen Sie im Adressfeld eines Browsers die folgende Adresse auf:

http://localhost:8000

Hinweis: Möglicherweise müssen Sie die Sicherheitseinstellungen des Browsers ändern, um eine Seite mit http aufrufen zu können.

Zunächst startet die WordPress Installation.

Wählen Sie die gewünschte Sprache für die Bedienoberfläche (das Backend) aus und bestätigen Sie mit „weiter“.

Anschließend geben Sie Ihrer Website einen Titel und legen einen Benutzer mit Passwort und E-Mail an. Die Sichtbarkeit für Suchmaschinen hat für eine Testumgebung ohne Erreichbarkeit aus dem Internet keine Bedeutung. Bestätigen Sie mit „WordPress installieren“.

Nach der erfolgreichen Installation können Sie sich im Backend anmelden.

Es öffnet sich ein Dashboard.

Von hier aus gelangen Sie über die Schaltfläche „Zur Website“ oben links zu einer Vorschau der neuen Seite.

Volumes

Docker-Volumes sind spezielle Speicherbereiche auf dem Host-System, die Daten über das Leben eines Containers hinaus erhalten. In unserem WordPress-Setup werden zwei Volumes verwendet:

  • db_data: speichert dauerhaft die Datenbankinhalte von MariaDB.
  • wp_content: enthält alle hochgeladenen Medien, installierten Themes und Plugins.

Diese Volumes sorgen dafür, dass auch nach dem Neustart oder Löschen der Container keine Daten verloren gehen. Nur die Container-„Hülle“ wird entfernt – die eigentlichen Inhalte bleiben bestehen.

Unter Ubuntu finden Sie die Dateien der Volumes im Verzeichnis

/var/lib/docker/volumes

In einem Terminal-Fenster lassen Sie sich die Dateien anzeigen mit

sudo docker volume ls

Und in der Dateiverwaltung:

Schauen Sie sich das Innenleben eines Volumes an, im Terminal mit dem Befehl

sudo docker volume ls<br>sudo docker volume inspect <volume-name>

Backup der Volumes

Um Inhalte zu sichern, können die Volumes einfach als Archiv-Datei gespeichert werden. Dazu nutzt man folgende Befehle im Terminal:

sudo docker volume inspect wp_content 

Der Pfad im Feld „Mountpoint“ zeigt, wo das Volume auf dem Host – also auf Ihrem Computer – liegt.

Ein einfaches Backup aller Inhalte von wp_content:

sudo tar -czvf wp_content-backup.tar.gz -C /var/lib/docker/volumes/wp_content/_data .

Ebenso kann auch db_data gesichert werden.

Weitere Informationen zum Backup von Docker-Volumes:

Container beenden

Sie können den Container beenden und die Volumes erhalten mit dem Befehl

docker compose down

Möchten Sie auch die Volumes löschen, verwenden Sie

docker compose down --volumes

Ausblick

Mit diesem Setup steht eine voll funktionsfähige WordPress-Instanz bereit – ideal für Tests, Theme-Anpassungen oder Plugin-Entwicklung. Wer möchte, kann das Setup weiter ausbauen:

  • phpMyAdmin zur komfortablen Verwaltung der Datenbank
  • Traefik oder Nginx für HTTPS und Domainweiterleitung
  • Eigene WordPress-Themes oder -Plugins entwickeln durch Mounting weiterer Verzeichnisse
  • Automatische Backups per Cronjob oder docker exec-Skripte

Docker eignet sich also nicht nur zum schnellen Testen, sondern auch als Grundlage für anspruchsvolle lokale Entwicklungsumgebungen.

Quellen:

Docker-Hub, WordPress

Bernd Öggl, Michael Kofler: „Docker“, 4. Auflage, Rheinwerk Verlag 2023

Grafik: Website-Icon