Dockerize WordPress mit Docker Compose

WordPress Multi-Container-Anwendung

Docker-Compose ist ein Tool mit dem du easy und komfortabel Multi-Container-Anwendungen definieren und starten kannst. In diesem Tutorial werden wir mit Docker-Compose zwei Anwendungen (WordPress und MySQL) Seite an Seite in einer isolierten Docker-Container Umgebungen laufen lassen.

Falls du gerade erst mit Docker startest und Docker bisher noch nicht installiert hast, kann ich dir zum Einstieg unser Tutorial Docker auf Ubuntu – Ein einfaches Kochrezept empfehlen. Vielleicht bist du ja auch bereits einen Schritt weiter und hast Docker-Container bereits manuell gestartet mit Docker-Container run? Docker-Container manuell zu starten hat jedoch einige Nachteile. Die Liste der Parameter kann schnell lang und komplex werden. Stell dir vor, du arbeitest im Team und ein Kollege soll die gleiche Anwendung deployen. Du musst ihm die unübersichtlichen Kommandos senden , zusätzliche Kommentare und Infos was die Reihenfolge der Ausführung und Anderes angeht. Genau aus diesem Grund hat Docker im Jahre 2014 das Open-Source-Projekt Fig übernommen, welches im Jahr 2015 in Docker-Compose umgewandelt wurde.

Wie funktioniert Docker-Compose?

In einem YAML File definierst du, wie deine Multi-Container Anwendung aufgebaut sein soll.
Informationen, die in so einem YAML File definiert werden, sind z. B. welches Image verwendet werden soll, welche Ports, welche Volumes oder die Festlegung von Environment-Variablen. Docker-Compose greift auf das definierte YAML File zu und automatisiert den Startprozess der Container. Das pullen der Images, die Erstellung des Network, starten der Container etc. läuft alles in einem Zug mit nur einem CLI Befehl (und in der richtigen Reihenfolge!) ab.

Vorbereitungen

Du kannst dem Tutorial lokal oder remote auf einem VPS folgen, einzige Voraussetzung ist eine installierte Docker-Engine und Docker-Compose. Bei einem Desktop-System wie Mac & Windows wird Docker-Compose bereits automatisch über den Installer mit installiert. Unter Linux Systemen muss Docker-Compose noch zusätzlich zu der Docker-Engine installiert werden. Wie das geht erkläre ich dir weiter unten.

Ich führe das Tutorial auf einem gridscale VPS mit Ubuntu 16.04 aus. In unserem gridscale Cloud-Panel kannst du dir mit wenigen Klicks und überzeugender Einfachheit einen eigenen Cloud-Server mit Linux-System aufbauen und direkt loslegen.

Docker-Compose installieren

Folge den nachfolgenden Schritten um Docker-Compose auf deinem Linux-System zu installieren. Die Installation lädt das Docker-Compose GitHub repository via Curl.

1. Letzte Version von Docker-Compose herunterladen:

 sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Hinweis: Schaue auf der GitHub repository Page nach, ob die Versions Nummer noch aktuell ist und editiere sie ggf. im obigen Befehl.

2. Füge die Berechtigungen zum Ausführen des Programms hinzu:

sudo chmod +x /usr/local/bin/docker-compose

3. Optionaler Schritt – Autovervollständigung zur Bash und zsh hinzufügen

4. Installation testen:

docker-compose --version

Verzeichnis vorbereiten

Ich erstelle zunächst ein neues Verzeichnis unter /srv plus drei Unterordner (Plugins, Themes, Uploads). Die Ordner definieren wir in unserem YAML File als mount point zu unserem WordPress Docker-Container. Auf diese Weise erreichen wir eine gewisse Datenpersistenz. Deine WordPress Daten sind so ausgelagert vom Docker-Container, wo du sie selbst Verwalten kannst.

 mkdir -P /srv/wordpress/ 
 cd /srv/wordpress/
 mkdir plugins themes uploads 

Am Ende ist folgende Verzeichnisstruktur gegeben:

Bist du bereit zu starten?

Oder hast du noch Fragen? Lasse dir jetzt dein Konto erstellen oder dich in einem persönlichen Gespräch beraten.

YAML File erstellen

Docker-Compose verarbeitet YAML Files, YAML ist eine vereinfachte Auszeichnungssprache.

Bei der Erstellung von einem YAML-File musst du unbedingt auf die richtige Syntax und Einrückung achten, andernfalls meckert YAML ganz schnell rum. Häufiger Grund für die Probleme sind copy und pasten oder wenn du beim Einrücken anstelle von Leerzeichen Tabs verwendest. Als Endung kannst du .yml oder .yaml benutzen, zwischen den beiden gibt es keinerlei Unterschiede.

Alles zur Syntax von Compose und zu allen Versionen, findest du in der Docker Dokumentation: https://docs.docker.com/compose/compose-file/

Tipp! Du kannst bei der Erstellung des YAML-File auch auf einen Online-Editor zurückgreifen: https://jsonformatter.org/yaml-formatter

Let’s Docker!

Erstelle zunächst mit einem Editor deiner Wahl eine neue Datei mit dem Namen docker-compose.yaml unter /srv/wordpress.

Die Datei docker-compose.yaml für unser Container-Setup sieht folgendermaßen aus:



version: '3.6'

services:
    db:
        image: mysql:5.7
        volumes:
          - data_db:/var/lib/mysql
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: mypassword
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress

    wordpress:
        image: wordpress:latest
        depends_on:
            - db
        ports:
            - 8080:80
        restart: always
        environment:
            WORDPRESS_DB_HOST: db:3306
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: wordpress
        volumes:
            - .wordpress/plugins:/var/www/html/wp-content/plugins
            - .wordpress/themes:/var/www/html/wp-content/themes
            - .wordpress/uploads:/var/www/html/wp-content/uploads
volumes:
    data_db:

Zum Schluss speicherst du das ganze ab.

Wie du siehst, kann man anhand der Datei schon ganz gut ableiten, was bei der Erstellung alles passieren soll. In der ersten Zeile wird die Compose Version angegeben und danach die Container-Services definiert. Der Datenbank geben wir den Namen “db” und als Image für den Service ziehen wir uns MySQL 5.7 aus dem Docker Hub. Unter Volumes mappen wir das Standard MySQL Verzeichnis zu dem Container Verzeichnis “data_db”.
Dadurch haben alle Updates an WordPress keinerlei Einfluss auf das Volume data_db. Zum Schluss werden die entsprechenden environment Variablen der Datenbank definiert, für das root-Passwort und das WordPress Datenbank Passwort wählst du am besten sichere Passwörter.

Im zweiten Abschnitt wird der WordPress Container definiert, depends_on legt die Abhängigkeit zum Datenbank Container fest. Unter Image ziehen wir uns die aktuellste WordPress Version und unter Port mappen wir den Port 8080 auf dem Host zu Port 80 auf dem Container (auf Host Seite kannst du einen beliebigen Port angeben der dir zur Verfügung steht). In der environment Variablen “WORDPRESS_DB_HOST: db:3306”
definieren wir den Datenbank Container db als Datenbank für WordPress, 3306 ist der Default MySQL Port zum connecten.

Container-Projekt starten

Nachdem du die Datei abgespeichert hast, kannst du deine Container-Anwendung auch schon starten. Dank Docker Compose brauchst du dafür jetzt nur noch einen Befehl:

 docker-compose up -d

Docker Compose erkennt automatisch das YAML in deinem aktuellen Verzeichnis, durchläuft deine Konfiguration und startet die Container-Anwendung.

Schau dir mit:

 docker ps

an, das deine Container gestartet wurden.

Das Ende des Tutorials naht und das Ziel ist zu sehen, über die IP-Adresse deines VPS und den spezifizierten Ports (in unserem Fall :8080), ist der bekannte WordPress Welcome-Bildschirm aufrufbar.

[deine-ip]:8080/wp-admin/install.php

Falls du dem Tutorial auf einer lokalen Maschine gefolgt bist, musst du ggf. noch deine Docker Host IP-Adresse rausfinden. Mit dem Befehl

 docker-machine ip default 

wird dir die IP-Adresse angezeigt, über die du dein WordPress aufrufen kannst.

Fazit

Mit Docker-Compose hast du ein weiteres Tool aus dem Docker Ökosystem kennengelernt. Ich habe dir das Konzept hinter Docker-Compose näher gebracht und du solltest jetzt in der Lage sein, selbst einfache Multi-Container Anwendungen zu definieren. Auf deinem Weg zum Docker Master, gibt es noch weitere Docker-Tools die es besser kennenzulernen gilt: Docker-Engine, Docker Hub, Docker Machine und Docker Swarm sind diese Kandidaten. Für deinen Einstieg in Docker Swarm wartet schon ein Artikel Docker Swarm vs. Kubernetes: Beide Container-Management-Tools im Vergleich auf dich!

Du hast jetzt noch Fragen, Anregungen oder wünschst dir ein neues Docker Tutorial zu einem bestimmten Thema? Schreib einfach eine Mail an team@gridscale.io

Happy Dockering!
<3