Docker eine praktische Einführung am Beispiel Dokuwiki

Zielsetzung

 
Es soll ein mittels docker ein Service ins lokale LAN angeboten werden.
Dieses Service soll sich automatisch mit dem Host starten.
Eine update bzw backup Strategie soll auch gleich angedacht werden

Aktuelle Version auf github

Die aktuelle Version (2017-02-19a) von docker-dokuwiki ist hier abrufbar.
Die aktuelle Entwicklungsversion (2017-02-19a) von docker-dokuwiki ist ab sofort hier abrufbar.

Image auswählen


mig@wz:~$ docker search --filter=stars=3 dokuwiki
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
istepanov/dokuwiki Docker image with dokuwiki and nginx. Supp... 36 [OK]
mprasil/dokuwiki Container running DokuWiki with nice URLs ... 33 [OK]
vimagick/dokuwiki A wiki application licensed under GPL 2 an... 8 [OK]
mig@wz:~$

Zeigt alle relevanten images mit einer Bewertung >= 3 Sterne an.
Ich entscheide mich für das Image von istepanov
Auf hub.docker.com kann man sich schon mal vorab informieren. Wie das docker-image gebaut wurde sieht man am dazughörenden Dockerfile
Hier gibt der Autor erste Backup & Update überlegungen, doch dazu später mehr
 

Container starten


mig@wz:~$ docker run -d -p 8100:80 --name dokuwiki istepanov/dokuwiki:2.0
Unable to find image 'istepanov/dokuwiki:2.0' locally
2.0: Pulling from istepanov/dokuwiki
b7f33cc0b48e: Pull complete
34890581ae16: Pull complete
1cedf9e5e000: Pull complete
46ec734e8c25: Pull complete
cfec01ba968d: Pull complete
aefa31ed0ccc: Pull complete
c1598b6ca8fb: Pull complete
Digest: sha256:bd4fb7d690f5146df618e9d54626082a5ff20ed7d2e177b4c897f0433406588a
Status: Downloaded newer image for istepanov/dokuwiki:2.0
75998521bc29cfe3781b7bc8125179a0375936a5cc20659b64df4728c7ac6008

Da das Image noch nicht lokal im Cache vorliegt, wird es erstmals von der globalen docker registry gepulled (docker pull istepanov/dokuwiki), im lokalen Cache abgelegt und gestartet. -p 8100:80 legt den Hostport 8100 auf den imageport 80.
Anemerkung ich verwende Port:8100 meines Dockerhosts da 8000 schon anderweitig vergeben ist.

Erste Tests

Mittel host.localdomain:8100 kann man sich nun die Startseite des noch unkonfigurierten Wikis anzeigen lassen
Analog dazu kommt man mittels host.localdomain:8100/install.php zur Installationseite der Dokuwiki-installation.
Wobei host.localdomain natürlich auf das eigene Netzwerk anzupassen ist.

manuelles starten und stoppen des Containers


mig@wz:~$ docker stop dokuwiki
dokuwiki
mig@wz:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75998521bc29 istepanov/dokuwiki:2.0 "/bin/sh -c /start.sh" 36 minutes ago Exited (137) 15 seconds ago dokuwiki
.
.

mig@wz:~$ docker start dokuwiki
dokuwiki
mig@wz:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75998521bc29 istepanov/dokuwiki:2.0 "/bin/sh -c /start.sh" 37 minutes ago Up 3 seconds 0.0.0.0:8100->80/tcp dokuwiki
.
.

mig@wz:~$

Shellzugang zum Container


docker exec -ti dokuwiki /bin/sh

starten und stoppen des Images mittels systemd

Wir erstellen eine systemd Unit und legen das service-file auf der Hostmaschine im Verzeichnis /etc/systemd/system/ ab
also zb. das File /etc/systemd/system/docker_dokuwiki.service

[Unit]
Description=Docker Service Dokuwiki
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a dokuwiki
ExecStop=/usr/bin/docker stop -t 2 dokuwiki

[Install]
WantedBy=default.target

wir stoppen das laufende Image und enablen das service-file

docker stop dokuwiki
systemctl daemon-reload
systemctl start docker_dokuwiki.service

Nach einer Funktionsüberprüfung teilen wir noch Systemd mit die Unit beim booten mitzustarten

systemctl enable docker_dokuwiki.service

Updateüberlegungen

Der Ersteller dess images stellt auch eine Updatestrategie für sein Image zur Verfügung
Der Weg über ein Busyboximage ist aber gefährlich und unnötig.
Hier gibts Erklärungen zu dieser Thematik
Besser ist es dieses Image zum aufrechterhalten des Datenvolumes zu verwenden. Danach wie im Beispiel auf der originalen Imageseite fortfahren

# create a new container
docker run --volumes-from dokuwiki --name dokuwiki-data cogniteev/echo

# now you can safely delete dokuwiki container
docker stop dokuwiki && docker rm dokuwiki

# to restore dokuwiki, create new dokuwiki container and attach dokuwiki-data volume to it
#useless at this point latest = 2.0
docker run -d -p 8100:80 --volumes-from dokuwiki-data --name dokuwiki istepanov/dokuwiki:latest

Warum nun der ganze Aufwand?
Dazu sollte man sich über folgende Begriffe im klaren sein: images container volume storagedriver. Treffer eins und zwei der Suche sollte man schon verstanden haben, darüberhinaus ist eine Suche mit diesen Begriffen (images container volume storagedriver) generell ein gute Möglichkeit sich einzulesen und allfällige Änderungen in zukünftigen Docker Versionen zu berücksichtigen.

Backup

Hier mal ein erstes lauffähiges Backup. Hier sind noch ein paar Schwächen, zb werden allfällig installierte Plugins nicht mitgenommen. Im nächsten Blogbeitrag werde ich daher das Image anpassen.
Anders als Istepanov benutze ich gleich sein Image als Backupcontainer. Es liegt ja schon lokal im Cache vor, und benötigt daher kaum zusätzlichen Speicherplatz egal ob ich 1,2 oder 100 Container damit baue. Das Image (immer ro) wird einfach mit einer neuen r/w-Schicht zu einem 2. Container, daß sinnlose verwenden eines eigenen ubuntu Images entfällt.

# Backup wird im aktuellen (working Direktory) abgelegt, der Container ist nur temporär (daher kein --name NAME und löscht sich (--rm) nach ausführung des tar-Befehls selber.
docker run --rm --volumes-from dokuwiki -v $(pwd):/backup istepanov/dokuwiki:2.0 tar zcvf /backup/dokuwiki-backup.tar.gz /var/dokuwiki-storage

Restore

Kein Backup ohne Restore, eignet sich natürlich auch das Dokuwikiservice auf einen anderen Host zu migrieren.
Ich benutze wieder kein eigenes busybox und ubuntu Image, sondern bleibe beim originalen Dokuwikiimage

#neuen Container erstellen bzw laufenden stoppen (docker stop dokuwiki)
docker create -p 8100:80 --name dokuwiki istepanov/dokuwiki:2.0

# restore from backup
#Mittels dokuwiki-backup.tar.gz aus den aktuellen (working Direktory).
docker run --rm --volumes-from dokuwiki -w / -v $(pwd):/backup istepanov/dokuwiki:2.0 tar xzvf /backup/dokuwiki-backup.tar.gz

# start dokuwiki
docker start dokuwiki

Linkliste

Fortsetzung des Artikels

docker-dokuwiki-teil2

4 comments on Docker eine praktische Einführung am Beispiel Dokuwiki

  1. Pingback: Dokuwiki – yawb

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.