WordPress und Docker: Die perfekte Entwicklungsumgebung

Werbung

Docker ist ziemlich genial. Und wer für WordPress-Themes oder Plug-ins entwickelt, der wird die Vorteile der Nutzung von Docker sehr schnell merken. Hier zeige ich dir, wie du das schnell und einfach hinbekommst.

Zuerst erstelle ich mir in einem neuen Ordner eine docker-compose.yml Datei.

Das Grundgerüst sieht so aus:

version: '3.8'
services:

In der einfachsten Variante nutze ich zwei Services. db und wordpress.

version: '3.8'
services:
  db:

  wordpress:

Für den Datenbank-Service nutze ich MySQL. Die WordPress Anforderungen sagen, alles ab MySQL 5.7 oder MariaDB 10.3 ist ok.

version: '3.8'
services:
  db:
    image: 'mysql:8.0'

  wordpress:

Damit die Datenbankeinträge nicht verloren gehen, erstelle ich noch ein Bind Mount auf dem Host. Außerdem gebe ich noch einen Port nach außen frei, damit ich später auch mal in die Datenbank schauen kann, mit einem externen Tool, wie TablePlus.

version: '3.8'
services:
  db:
    image: 'mysql:8.0'
	ports: 
	  - '33060:3306'
	volumes:
	  - './data/mysql:/var/lib/mysql'

  wordpress:

Hinzu kommen dann noch die Umgebungsvariablen, damit der WordPress Container damit arbeiten kann.

version: '3.8'
services:
  db:
    image: 'mysql:8.0'
	ports: 
	  - '33060:3306'
	volumes:
	  - './data/mysql:/var/lib/mysql'
	environment:
	  MYSQL_ROOT_PASSWORD: cMZhxBgtzKqMcCek
	  MYSQL_DATABASE: wordpress
	  MYSQL_USER: wordpress
	  MYSQL_PASSWORD: tfmHafL4Bf3RQ4Zz

  wordpress:

Die Passwörter habe ich über Random.org erstellt. Ich habe es mir abgewöhnt, so etwas wie 12345678 zu nutzen. Das liegt hauptsächlich daran, dass Passworttools wie Lastpass meckern, wenn man diese benutzt.

Der Datenbank Service db ist damit fertig und als Nächstes folgt dann der wordpress Service.

version: '3.8'
services:
  db:
    image: 'mysql:8.0'
	ports: 
	  - '33060:3306'
	volumes:
	  - './data/mysql:/var/lib/mysql'
	environment:
	  MYSQL_ROOT_PASSWORD: cMZhxBgtzKqMcCek
	  MYSQL_DATABASE: wordpress
	  MYSQL_USER: wordpress
	  MYSQL_PASSWORD: tfmHafL4Bf3RQ4Zz

  wordpress:
    image: 'wordpress:6.0.1'

Zum Zeitpunkt der Erstellung ist WordPress 6.0.1 aktuell. Ich könnte ich auch latest angeben, aber ich will wissen welche Version ich installiere.

Auch hier gebe ich wieder einen Port an. Damit rufe ich die Entwicklungsumgebung dann später auch auf.

Werbung
version: '3.8'
services:
  db:
    image: 'mysql:8.0'
	ports: 
	  - '33060:3306'
	volumes:
	  - './data/mysql:/var/lib/mysql'
	environment:
		MYSQL_ROOT_PASSWORD: cMZhxBgtzKqMcCek
		MYSQL_DATABASE: wordpress
		MYSQL_USER: wordpress
		MYSQL_PASSWORD: tfmHafL4Bf3RQ4Zz

  wordpress:
    image: 'wordpress:6.0.1'
	ports:
		- '8080:80'

Damit sich der wordpress Service mit der Datenbank verbinden kann, gebe ich hier auch Umgebungsvariablen an.

version: '3.8'
services:
  db:
	image: 'mysql:8.0'
	ports: 
	  - '33060:3306'
	volumes:
		- './data/mysql:/var/lib/mysql'
	environment:
		MYSQL_ROOT_PASSWORD: cMZhxBgtzKqMcCek
		MYSQL_DATABASE: wordpress
		MYSQL_USER: wordpress
		MYSQL_PASSWORD: tfmHafL4Bf3RQ4Zz

  wordpress:
	image: 'wordpress:6.0.1'
	ports:
		- '8080:80'
	environment:
		WORDPRESS_DB_HOST: db
		WORDPRESS_DB_USER: wordpress
		WORDPRESS_DB_PASSWORD: tfmHafL4Bf3RQ4Zz
		WORDPRESS_DB_NAME: wordpress

Zum Schluss der Konfiguration lege ich jetzt noch das WordPress Code Verzeichnis nach außen, aber auch extra noch mal das plugins und das themes Verzeichnis. Ich finde das etwas übersichtlicher.

version: '3.8'
services:
  db:
	image: 'mysql:8.0'
	ports: 
		- '33060:3306'
	volumes:
		- './data/mysql:/var/lib/mysql'
	environment:
		MYSQL_ROOT_PASSWORD: cMZhxBgtzKqMcCek
		MYSQL_DATABASE: wordpress
		MYSQL_USER: wordpress
		MYSQL_PASSWORD: tfmHafL4Bf3RQ4Zz

  wordpress:
	image: 'wordpress:6.0.1'
	ports:
		- '8080:80'
	environment:
		WORDPRESS_DB_HOST: db
		WORDPRESS_DB_USER: wordpress
		WORDPRESS_DB_PASSWORD: tfmHafL4Bf3RQ4Zz
		WORDPRESS_DB_NAME: wordpress
	volumes:
		- "./wordpress:/var/www/html"
		- "./plugins:/var/www/html/wp-content/plugins"
		- "./themes:/var/www/html/wp-content/themes"

Das war es eigentlich. Jetzt starte ich das Ganze mit docker-compose up und sollte im Dateisystem die Volumes sehen.

WordPress Docker Verzeichnisstruktur

Wenn ich jetzt http://localhost:8080 aufrufe, dann startet die Installation von WordPress. Dadurch, dass wir die Datenbank Files aus dem Container herausgelegt haben, bleiben die Änderungen auch bestehen.

Das Git Repository findest du auf Github.

Kompletter Neuaufbau der Datenbank

Fahre einfach die Container runter mit docker compose down und lösche das data Verzeichnis. Danach dann wieder mit docker compose up starten und du hast eine frische WordPress Installation.

Viel Spaß damit. Ich hoffe, ich konnte dir ein wenig helfen. Hinterlasse doch einfach einen Kommentar. Ich freue mich.