Schlagwort: WordPress

  • WordPress im Docker-Container

    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