Docker Beispiel Silverstripe CMS
Docker Beispiel Silverstripe CMS
Docker Hub
Docker Hub liefert uns bereits einige passende Images mit denen wir unsere Container Landschaft aufsetzen können.
Nach anderen oder aktuelleren Images kann direkt auf der Webseite von Docker Hub gesucht werden.
Datenbank Image
Für unser Projekt verwenden wir MariaDB als Datenbank. MariaDB basiert sozusagen auf MySQL und kann daher problemlos für alle MySQL Projekte verwendet werden. MariaDB ist frei unter der GNU GPL Lizenz.
Auf Docker Hub gibt es für MariaDB ein offizielles Image. Offizielle Images sind meist besonders gut beschrieben und bieten eine Vielzahl an Einstellungsmöglichkeiten.
Wir können das Image via
docker pull mariadb
in unsere Docker Repository ziehen.
Datenbank Container
Danach können wir daraus einen Container starten. Wir setzen eine Verlinkung auf einen zuvor am Rechner angelegten Ordner - damit bleiben die Daten auch nach dem abschalten des Containers weiterhin erhalten. Zusätzlich setzen wir das Root Passwort, leiten den exposeden Port vom Container auf den selben Port nach aussen weiter und geben dem Container einen Namen. Als Version verwenden wir die letzte stable Version vom MariaDB.
docker run -d -v /Users/MeinUserName/Dataspace/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --name ss4mariadb mariadb:10.3.11-bionic
Verbindung testen
Um nun die Verbindung zu testen, können wir Sequel Pro für macOS verwenden. Sequel Pro ist kostenlos und einfach zu installieren.
Nach der Installation können wir mit den nachstehenden Angaben die Verbindung prüfen:
Name: Localhost MariaDB Host: 127.0.0.1 Benutzer: root Passwort: root
Den Rest einfach leer lassen das es die Standardeinstellungen wiederspiegelt. Anschließend den Button "Verbindung testen" drücken.
Wenn die Verbindung erfolgreich war, können wir nun den Container für den Webserver starten.
Webserver Image
Leider gibt es vom Silverstripe kein offizielles Docker Image. Nichts desto trotz wird das Image von brettt89/silverstripe-web zumindest laut Github teilweise von Silverstripe verwaltet.
Das Image enthält Apache, PHP und enthält eine vergleichbar gute Dokumentation.
Das Image kann via
docker pull brettt89/silverstripe-web
in unsere Docker Repository gezogen werden.
Webserver Container
Wir möchten nun einen Webserver Container starten und auch hier auf externe Daten der Webseite zeigen um sie außerhalb zu bearbeiten und zu behalten. Wir leiten den exposden Standardport von 80 im Container auf 80 weiter und können somit im Anschluss die Webseite via localhost aufrufen. Wir mappen den internen html Ordner mit unserem Projekt Folder und verlinken die Datenbank. Da es sich nicht um eine MySql Datenbank handelt müssen wir auch hier den Namen der Datenbank die wir ss4mariadb genannt haben auf :mysql exposen. Wir geben auch hier dem Container einen namen und verwenden als Image Version - 7.1-alpine.
docker run -p 80:80 -v /Users/MeinUserName/Workspace/Silverstripe/bitcoin-atm-locator:/var/www/html --link ss4mariadb:mysql --name project_btc_atm brettt89/silverstripe-web:7.1-alpine
Wie im Command ersichtlich ist die Reihenfolge nicht vorgegeben.
Silvertripe Environment .env
Innerhalb der .env Datei unseres Projekte müssen wir zur korrekten Verbindung den Datenbankserver ss4mariadb nennen.
SS_DATABASE_SERVER="ss4mariadb"
Docker Compose
Anhand der gewonnen Informationen können wir daraus nun ein Docker Compose File generieren:
version: '3.2' services: mariadb: image: mariadb:10.4.2 restart: always container_name: ss4mariadb ports: - 3306:3306 networks: - silverstripe volumes: - /Users/rolandschellhorn/Dataspace/${DATABASE_FOLDER}:/var/lib/mysql:rw,cached silverstripe: depends_on: - mariadb image: brettt89/silverstripe-web:7.1-alpine restart: always container_name: project_btc_atm ports: - 8080:80 networks: - silverstripe volumes: - /Users/rolandschellhorn/Workspace/Silverstripe/${PROJECT_FOLDER}:/var/www/html:rw,cached networks: silverstripe: driver: bridge
Das Environment File erweitern wir mit:
# Docker PROJECT_FOLDER=project_name DATABASE_FOLDER=mariadb MYSQL_ROOT_PASSWORD=root