So installieren Sie Wordpress und PhpMyAdmin mit Docker Compose unter Ubuntu 14.04

Einführung

Docker Compose behandelt die Orchestrierungsprozesse von Docker-Containern (z B. das Starten, Herunterfahren und Einrichten von Intra-Container-Verbindungen und -Volumes) ganz einfach.

Dieser Artikel enthält ein realistisches Beispiel für die Verwendung von Docker Compose zur Installation einer Anwendung, in diesem Fall WordPress mit PHPMyAdmin als Extra. WordPress läuft normalerweise auf einem LAMP-Stack, dh Linux, Apache, MySQL / MariaDB und PHP. Das offizielle WordPress Docker-Image enthält für uns Apache und PHP. Der einzige Teil, über den wir uns Sorgen machen müssen, ist MariaDB.

Voraussetzungen

Um diesem Artikel zu folgen, benötigen Sie Folgendes:

Schritt 1 - Installieren von WordPress

Wir verwenden die offiziellen Docker-Images https://hub.docker.com//wordpress/[WordPress] und https://hub.docker.com//mariadb/[MariaDB]. Wenn Sie neugierig sind, finden Sie auf den jeweiligen GitHub- und Docker Hub-Seiten viele weitere Informationen zu diesen Bildern und ihren Konfigurationsoptionen.

Beginnen wir damit, einen Ordner zu erstellen, in dem unsere Daten gespeichert werden, und eine minimale "+ docker-compose.yml +" -Datei zu erstellen, um unseren WordPress-Container auszuführen:

mkdir ~/wordpress && cd $_

Dann erstellen Sie eine "+ ~ / wordpress / docker-compose.yml +" mit Ihrem bevorzugten Texteditor (nano ist einfach, wenn Sie keine Präferenz haben):

nano ~/wordpress/docker-compose.yml

und füge folgendes ein:

~ / wordpress / docker-compose.yml

wordpress:
 image: wordpress

Dies weist Docker Compose lediglich an, einen neuen Container mit dem Namen "+ wordpress " zu starten und das " wordpress +" - Image vom Docker Hub herunterzuladen.

Wir können das Bild so aufführen:

docker-compose up

Sie werden feststellen, dass Docker das WordPress-Image vom Docker Hub herunterlädt und daraus extrahiert. Nach einiger Zeit werden Fehlermeldungen angezeigt, die der folgenden ähneln:

Outputwordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

Dies ist WordPress, das sich beschwert, dass keine Datenbank gefunden werden kann. Fügen wir der Mischung ein MariaDB-Bild hinzu und verknüpfen Sie es, um das zu beheben.

Schritt 2 - MariaDB installieren

Um das MariaDB-Image der Gruppe hinzuzufügen, öffnen Sie + docker-compose.yml mit Ihrem Texteditor:

nano ~/wordpress/docker-compose.yml

Ändern Sie + docker-compose.yml + so, dass es mit dem folgenden übereinstimmt (achten Sie auf den Einzug, YAML-Dateien sind für Leerzeichen empfindlich)

docker-compose.yml

wordpress:
 image: wordpress

Wir haben hier einen neuen Container mit dem Namen "+ wordpress_db " definiert und ihn angewiesen, das " mariadb " - Image vom Docker Hub zu verwenden. Wir haben auch den Container " wordpress " angewiesen, unseren Container " wordpress_db " mit dem Container " wordpress " zu verknüpfen und ihn " mysql " zu nennen (innerhalb des Containers " wordpress " wird der Hostname " mysql " weitergeleitet unser ` wordpress_db +` Container).

Wenn Sie "+ docker-compose up +" erneut ausführen, wird das MariaDB-Image heruntergeladen, und Sie werden auch feststellen, dass wir noch nicht ganz da sind:

Outputwordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    |
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

WordPress beschwert sich immer noch darüber, dass keine Datenbank gefunden werden kann, und jetzt haben wir eine neue Beschwerde von MariaDB, die besagt, dass kein root-Passwort festgelegt ist.

Es scheint, dass die Verknüpfung der beiden Container nicht ausreicht. Lassen Sie uns fortfahren und die Variable "+ MYSQL_ROOT_PASSWORD +" setzen, damit wir dieses Ding tatsächlich starten können.

Bearbeiten Sie die Docker Compose-Datei noch einmal:

nano ~/wordpress/docker-compose.yml

Fügen Sie diese beiden Zeilen zum end des + wordpress_db + Abschnitts hinzu, aber * stellen Sie sicher, dass Sie ein sichereres Passwort verwenden! *

docker-compose.yml

wordpress_db:
...


...

Dadurch wird eine Umgebungsvariable im Container "+ wordpress_db " mit dem Namen " MYSQL_ROOT_PASSWORD " mit dem gewünschten Kennwort festgelegt. Das MariaDB Docker-Image ist so konfiguriert, dass es beim Start nach dieser Umgebungsvariablen sucht, und kümmert sich darum, die Datenbank mit einem Root-Konto einzurichten, dessen Kennwort als " MYSQL_ROOT_PASSWORD +" definiert ist.

Richten wir auch einen Port für die Weiterleitung ein, damit wir nach dem Laden eine Verbindung zu unserer WordPress-Installation herstellen können. Fügen Sie unter "+ wordpress +" diese beiden Zeilen hinzu:

docker-compose.yml

wordpress:
...


...

Die erste Portnummer ist die Portnummer auf dem Host und die zweite Portnummer ist der Port im Container. Diese Konfiguration leitet also Anforderungen an Port 8080 des Hosts an den Standard-Webserver-Port 80 im Container weiter.

Ihre vollständige Datei + docker-compose.yml + sollte nun so aussehen:

docker-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD:

Mit dieser Konfiguration können wir WordPress starten. Dieses Mal führen wir es mit der Option "+ -d " aus, mit der " docker-compose +" angewiesen wird, die Container im Hintergrund auszuführen, damit Sie Ihr Terminal weiterhin verwenden können:

docker-compose up -d

Sie sehen eine ganze Reihe von Texten auf Ihrem Bildschirm. Wenn Sie sich beruhigt haben, öffnen Sie einen Webbrowser und suchen Sie die IP + Ihrer DigitalOcean-Box an Port 8080 (falls die IP-Adresse Ihres Servers beispielsweise lautet, geben Sie sie in Ihren Browser ein).

Sie sollten eine neue WordPress-Installationsseite sehen und in der Lage sein, die Installation und das Blog wie gewohnt abzuschließen.

Da es sich um offizielle Docker-Images handelt und alle Best Practices von Docker befolgt, verfügt jedes dieser Images über vordefinierte, beständige Volumes. Wenn Sie also den Container neu starten, sind Ihre Blog-Posts weiterhin vorhanden. Weitere Informationen zum Arbeiten mit Docker-Volumes finden Sie unter Docker-Datenvolumes Lernprogramm.

Schritt 3 - Hinzufügen eines PhpMyAdmin-Containers

Toll, das war relativ schmerzfrei. Lassen Sie uns versuchen, etwas Phantasie zu bekommen.

Bisher verwenden wir nur offizielle Bilder, die das Docker-Team mit größter Sorgfalt auf ihre Richtigkeit hin überprüft. Möglicherweise haben Sie bemerkt, dass wir dem WordPress-Container keine Umgebungsvariablen zuweisen mussten, um ihn zu konfigurieren. Sobald wir es mit einem richtig konfigurierten MariaDB-Container verbunden hatten, funktionierte alles.

Dies liegt daran, dass sich im WordPress Docker-Container ein Skript befindet, das die Variable "+ MYSQL_ROOT_PASSWORD " aus unserem Container " wordpress_db +" abruft und diese verwendet, um eine Verbindung zu WordPress herzustellen.

Wagen wir uns aus dem offiziellen Bildbereich heraus und verwenden ein community contributed PhpMyAdmin image. Mach weiter und bearbeite + docker-compose.yml + noch einmal:

nano docker-compose.yml

Fügen Sie am Ende der Datei Folgendes ein:

docker-compose.yml

phpmyadmin:
 image: corbinu/docker-phpmyadmin
 links:
   - wordpress_db:mysql
 ports:
   - 8181:80
 environment:
   MYSQL_USERNAME: root
   MYSQL_ROOT_PASSWORD:

Stellen Sie sicher, dass Sie das gleiche root-Passwort aus dem Container + wordpress_db + verwenden, den Sie zuvor eingerichtet haben.

Dies holt sich "+ docker-phpmyadmin " vom Community-Mitglied " corbinu " und verknüpft es mit unserem " wordpress_db " -Container mit dem Namen " mysql " (dh innerhalb des " phpmyadmin " -Containers wird auf den Hostnamen " mysql " verwiesen) wird an unseren ` wordpress_db ` Container weitergeleitet), legt seinen Port 80 auf Port 8181 des Hostsystems offen und setzt schließlich einige Umgebungsvariablen mit unserem MariaDB-Benutzernamen und -Kennwort. Dieses Bild ruft nicht automatisch die Umgebungsvariable " MYSQL_ROOT_PASSWORD " aus der Umgebung des Containers " wordpress_db " ab, wie dies mit dem Bild " wordpress " der Fall ist. Wir müssen tatsächlich die Zeile " MYSQL_ROOT_PASSWORD: " aus dem Container " wordpress_db " kopieren und den Benutzernamen auf " root +" setzen.

Die komplette Datei + docker-compose.yml + sollte nun so aussehen:

docker-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD: examplepass

Starten Sie nun die Anwendungsgruppe erneut:

docker-compose up -d

Sie werden sehen, wie PhpMyAdmin installiert wird. Besuchen Sie danach erneut die IP-Adresse Ihres Servers (diesmal über Port 8181, z. ). Sie werden vom PhpMyAdmin-Anmeldebildschirm begrüßt.

Melden Sie sich mit dem in der YAML-Datei festgelegten Benutzernamen "+ root " und dem Kennwort an, und Sie können Ihre Datenbank durchsuchen. Sie werden feststellen, dass der Server eine " wordpress +" - Datenbank enthält, die alle Daten aus Ihrer WordPress-Installation enthält.

Sie können so viele Container hinzufügen, wie Sie möchten, und diese nach Belieben verknüpfen. Wie Sie sehen, ist der Ansatz ziemlich leistungsfähig. Statt sich mit der Konfiguration und den Voraussetzungen für die einzelnen Komponenten zu befassen und sie alle auf demselben Server einzurichten, können Sie die Teile wie Legoblöcke zusammenfügen und Komponenten stückweise hinzufügen. Mit Tools wie Docker Swarm können Sie diese Container sogar transparent über mehrere Server ausführen! Dies ist jedoch etwas außerhalb des Umfangs dieses Lernprogramms. Docker stellt bei Interesse [Dokumentation] https://docs.docker.com/swarm/install-w-machine/ zur Verfügung.

Schritt 4 - Erstellen der WordPress-Site

Was passiert mit Ihren Dateien, wenn Sie den Container anhalten und erneut starten, da alle Dateien für Ihre neue WordPress-Site in Ihrem Docker-Container gespeichert sind?

Standardmäßig ist der Dokumentenstamm für den WordPress-Container persistent. Dies liegt daran, dass das WordPress-Image vom Docker Hub auf diese Weise konfiguriert wird. Wenn Sie eine Änderung an Ihrer WordPress-Site vornehmen, die Anwendungsgruppe beenden und erneut starten, werden auf Ihrer Website weiterhin die von Ihnen vorgenommenen Änderungen gespeichert.

Lass es uns versuchen.

Wechseln Sie von einem Webbrowser (z. ). Bearbeiten Sie den * Hello World! * - Beitrag, der bereits vorhanden ist. Stoppen Sie dann alle Docker-Container mit dem folgenden Befehl:

docker-compose stop

Versuchen Sie erneut, die WordPress-Site zu laden. Sie werden sehen, dass die Website nicht verfügbar ist. Starten Sie die Docker-Container erneut:

docker-compose up -d

Laden Sie erneut die WordPress-Site. Sie sollten Ihre Blog-Site und die zuvor vorgenommenen Änderungen sehen. Dies zeigt, dass die von Ihnen vorgenommenen Änderungen auch dann gespeichert werden, wenn die Container angehalten werden.

Schritt 5 - Speichern des Dokumentenstamms auf dem Host-Dateisystem (optional)

Das Document Root für WordPress kann auf dem Host-Dateisystem mit einem Docker-Daten-Volume gespeichert werden, um Dateien zwischen dem Host und dem Container freizugeben.

Lass es uns versuchen. Öffnen Sie die Datei + docker-compose.yml + noch einmal:

nano ~/wordpress/docker-compose.yml

Fügen Sie im Abschnitt + wordpress: + die folgenden Zeilen hinzu:

~ / wordpress / docker-compose.yml

wordpress:
...


   ...

Beenden Sie Ihre derzeit ausgeführte "+ docker-compose +" - Sitzung:

docker-compose stop

Entfernen Sie den vorhandenen Container, damit wir das Volume dem Host-Dateisystem zuordnen können:

docker-compose rm wordpress

Starten Sie WordPress erneut:

docker-compose -d

Sobald die Eingabeaufforderung zurückkehrt, sollte WordPress wieder betriebsbereit sein - diesmal unter Verwendung des Host-Dateisystems zum Speichern des Dokumentenstamms.

Wenn Sie in Ihr "+ ~ / wordpress " - Verzeichnis schauen, werden Sie feststellen, dass sich jetzt ein " wp_html +" - Verzeichnis darin befindet:

ls ~/wordpress

Alle WordPress-Quelldateien befinden sich darin. Änderungen, die Sie vornehmen, werden vom WordPress-Container in Echtzeit übernommen.

Diese Erfahrung war etwas flüssiger als normalerweise - der WordPress Docker-Container ist so konfiguriert, dass er prüft, ob "+ / var / www / html +" leer ist oder nicht, wenn er gestartet wird, und die Dateien entsprechend kopiert. Normalerweise müssen Sie diesen Schritt selbst ausführen.

Fazit

Sie sollten eine vollständige WordPress-Bereitstellung haben, die ausgeführt wird. Mit derselben Methode sollten Sie in der Lage sein, eine Vielzahl von Systemen mithilfe der auf dem Docker Hub verfügbaren Images bereitzustellen. Stellen Sie sicher, dass Sie für jeden + Container, den Sie erstellen, herausfinden, welche Volumes persistent sind und welche nicht.

Viel Spaß beim Andocken!