Hier zeige ich euch beispielhaft einige einfache Container und erkläre kurz die Funktionen.
1. Container mit apache und php
Erstellen Sie im ersten Schritt einen neuen Ordner und wechseln in diesen.
mkdir docker-apache cd docker-apache
Nun erstellen wir eine php Datei, welche unser Webserver später anzeigen soll. Dazu öffnet ihr den Editor nano und gebt folgendes ein.
nano index.php Dort gebt ihr folgendes ein: <!DOCTYPE html> <html> <head> <title>Hallo Docker</title> </head> <body> <h1>Mein erster Container</h1> <?php $load = sys_getloadavg(); ?> Serverzeit: <?php echo date("c"); ?><br /> Serverauslastung (load): <?php echo $load[0]; ?> </body> </html>
Nun erstellen wir ein Dockerfile. In dieser Datei sagen wir Docker, was wir tun wollen.
nano Dockerfile Dort gebt ihr folgendes ein: FROM php:7-apache ENV TZ="Europe/Berlin" COPY index.php /var/www/html
Erklärung:
- FROM: gibt das Image an, auf dem später unser Server laufen soll. Die Images werden alle von Docker Hub geladen.
- ENV: Dort legen wir Umgebungsvariablen fest. Hier unsere Zeitzone.
- COPY: Mit diesem Befehl kopieren wir die Datei index.php in unseren Container.
Nun müssen wir den Container nur noch starten. Dazu gebt ihr folgendes ein:
docker build -t mein-erster-container .
Erklärung:
Der Befehl dient dazu einen Docker Container anhand unseres Dockerfiles zu erstellen. Der Parameter "-t" versieht den Container mit einem Tag. Das erleichtert uns später das Starten. Der Punkt "." am Ende muss gesetzt werden.
Jetzt müssen wir unseren eben erstellen Container nur noch starten. Dazu gebt ihr folgendes ein:
docker run -p 8080:80 mein-erster-container
Erklärung:
Der Befehl "run" startet den Container "mein-erster-container". Der Parameter "-p 8080:80" dient dazu, den Container von außen auf dem Port 8080 erreichbar zu machen. Innerhalb des Containers läuft der Apache Server jedoch auf Port 80. Dies hat für uns hier den Vorteil, dass auf unserem Server noch ein anderer Webserver laufen kann, ohne dass es beim Port-Mapping zu Fehlern kommt.
Wenn ihr jetzt auf eure Homepage und dem Port 8080 (zum Beispiel: www.meinehomepage.de:8080) geht, sollte es so aussehen:
Um den Container zu beenden drückt ihr einfach “STRG+C” auf der Tastatur.
2. Container mit MySQL Datenbank MariaDB
In diesem Beispiel wollen wir einen Container mit MariaDB erstellen. Diesen gibt es zum Glück schon komplett fertig im Docker Hub. Daher müssen wir diesen nur Starten.
docker run -d --name mariadb-1 --env MYSQL_ROOT_PASSWORD=geheim123 mariadb
Erklärung
- d: Der Container wird im Hintergrund gestartet
- name: Wir geben dem Container den Namen “mariadb-1”
- env: Hier geben wir unser MySQL-Root-Passwort per Umgebungsvariable mit
- mariadb: Dies ist das Image, welches sich Docker runterlädt
Nun läuft der Container im Hintergrund. Mittels folgendem Befehl könnt ihr dies überprüfen:
docker ps
2.1 Befehle im Container ausführen
Nun ist es euch Möglich Befehle im Container auszuführen. Dazu gebt ihr folgendes ein:
docker exec -it mariadb-1 /bin/bash
Nun könnt ihr auf der Console Befehle innerhalb des Containers ausführen.
Ihr könnt auch mittels der Container ID auf den Container zugreifen (anstatt des Namens). Dies seht ihr hier.
2.2 MariaDB Client aufrufen
Ihr könnt euch auch ganz normal per Console bei MariaDB anmelden. Dazu gebt ihr folgendes ein:
docker exec -it mariadb-1 mysql -u root -p
2.3 Container beenden
Wie ihr sicher festgestellt habt, könnt ihr diesen Container nicht einfach per “STRG+C” beenden, wie es im ersten Beispiel der Fall war. Hier müsst ihr folgenden Befehl eingeben:
docker stop mariadb-1
Überprüfen könnt ihr es mit folgendem Befehl:
docker ps
2.4 Logdateien des Containers anzeigen
Da der Container im Hintergrund läuft, wird in der Konsole keine Ausgabe angezeigt. Mit diesem Befehl könnt ihr euch alle Logs des Containers anschauen.
docker logs mariadb-1
2.5 Container löschen
Wenn wir unseren Container löschen möchten, so müssen wir nur folgenden Befehl eingeben:
docker rm mariadb-1
2.6 Volume löschen
Neben dem Container wird noch ein Volume erstellt. Das Volume beinhaltet in unserem Fall alle Einträge der Datenbank. Daher wird es nicht direkt mit dem Container gelöscht. Dies müsst ihr noch selbst tun. Mit folgendem Befehl könnt ihr euch alle Volumes anzeigen lassen:
docker volume ls
Mit nachfolgendem Befehl werden ALLE Volumes gelöscht, welche momentan nicht in einen Container eingebunden sind:
docker volume prune
Ihr könnt aber auch ein spezielles Volume mit folgendem Befehl löschen:
docker volume rm <Volume Name>
Als Schutz, dass ihr nicht versehentlich ein Volume löscht, welches noch zu einem Container gehört, verweigert Docker hier das Löschen.
2.7 Eigene Volume Verzeichnisse anlegen
2.7.1 Woher weiß ich, welche Verzeichnisse ich mounten muss?
Mit folgendem Befehl könnt ihr in den ursprünglichen MariaDB Container schauen und da sieht man es.
docker inspect mariadb-1
2.7.2 Volumes mounten
Die Container werden ja regelmäßig gelöscht, wenn ihr beispielsweise eine neue Version installiert. Die Daten der Datenbank sollen jedoch immer erhalten bleiben. Daher kann es sinnvoll sein, Docker den kompletten Pfad zum Verzeichnis mitzugeben. Dies hat den Vorteil, dass ihr dieses Verzeichnis immer weiternutzten könnt, wenn ihr beispielsweise nach einem Update einen neuen Container erstellt.
#Verzeichnis erstellen in eurem Homeverzeichnis mkdir /home/<euerName>/mariadb-2 docker run -d --name mariadb-2 --env MYSQL_ROOT_PASSWORD=geheim123 --volume /home/<euerName>/mariadb-2/:/var/lib/mysql mariadb
Erklärung:
- volume: Gibt das Verzeichnis an, welches eingebunden werden und den Ort innerhalb des Containers
Dies können wir nun mittels nachfolgendem Befehl überprüfen.
docker inspect mariadb-2
3. Zwei Container sollen mittels Netzwerk miteinander kommunizieren
In diesem Beispiel sollen zwei Container (MariaDB, phpmyadmin) miteinander kommunizieren. Ein Netzwerk lässt sich mittels Docker mit folgendem Befehl aufbauen. Es soll “lan-intern” heißen.
docker network create lan-intern
Nun müssen wir unserem MariaDB Container dieses Netzwerk noch mitgeben.
#Verzeichnis für das Volume anlegen mkdir /home/<euerName>/mariadb-3 docker run -d --name mariadb-3 --network lan-intern --env MYSQL_ROOT_PASSWORD=geheim123 --volume /home/<euerName>/mariadb-3/:/var/lib/mysql mariadb
Als nächstes starten wir phymyadmin als Container. Auch hier gibts bereits ein fertiges Image.
docker run -d --name padmin -p 8081:80 --network lan-intern --env PMA_HOST=mariadb-3 phpmyadmin/phpmyadmin
Erklärung:
- network: Gibt dem Container das Netzwerk mit.
- env PMA_Host: Hier wird der MySQL Server angeben. Woher weiß man das? Es steht in der Doku des Containers hier.
Wenn ihr jetzt auf eure Homepage und den Port 8081 geht, solltet ihr folgendes sehen:
Einloggen tut ihr euch mit folgenden Daten, die wir zuvor festgelegt hatten.
- Benutzername: root
- Passwort: geheim123
4. WordPress installieren
In den vorherigen Schritten haben wir einen MySQL Container erstellt sowie einen mit phpmyadmin. Nun wollen wir dazu noch einen mit WordPress erstellen. Auch hier werden mittels des Netzwerks Daten ausgetauscht.
#Volume für WordPress anlegen mkdir /home/<euerName>/wordpress #Wordpress Container erstellen docker run -d --name wp --network lan-intern --volume /home/<euerName>/wordpress:/var/www/html -p 8082:80 --env WORDPRESS_DB_PASSWORD=geheim123 --env WORDPRESS_DB_HOST=mariadb-3 wordpress
Nun rufen wir unser WordPress über den Port 8082 auf.
So schnell habt ihr WordPress installiert und könnt direkt damit arbeiten.