Auf Tuchfühlung mit Docker.

Seit der Ankündigung von PhotonOS, auf der VMworld 2015, bin ich im Docker-Fieber.

Gut das wir aktuell ein Hosting für diesen Blog brauchten und so bot es sich an, mal auf Tuchfühlung mit Docker zu gehen. Heute kann ich (auch ein wenig stolz) verkünden, dass dieser WordPress-Blog in einem Container läuft. Ich möchte hier meine ersten Erfahrungen damit beschreiben.

Was ist Docker und welche „Probleme“ adressiert es eigentlich?

Ein klassischer Server besteht aus einem Betriebssystem und Applikationen, welche oft irgendwelche Abhängigkeiten zueinander haben. Applikation 1 benötigt zB. eine bestimmte Tomcat-Version und Applikation 2 eine ältere oder auch neuere Version. Seit es die Server-Virtualisierung gibt, gibt es auch eine Lösung für dieses Problem: Man deployed einfach einen weiteren Server, welcher die Anforderungen von Applikation 2 erfüllt. Problem gelöst.

Somit schossen große Mengen Server aus dem Boden, welche wiederum gewartet werden möchten (Patches, etc.).

Wie das Foto aus dem Hamburger Frachthafen zeigt, löst Docker dieses Problem mit sogenannten Containern. So ein Container beinhaltet Applikationen inklusive aller Abhängigkeiten. Am Beispiel von WordPress befindet sich zB. ein Apache Webserver in diesem Container. Da diese Container in sich isoliert sind, ist es möglich mehrere Container auf einem Server zu betreiben.

Hat man seine Applikation in so einem Container verpackt, lässt sich dieser auch beliebig oft hosten. Ist zB. eine neue Version der Applikation verfügbar, kann man nun den Container auf einem Staging Host starten, die Applikation aktualisieren und testen. Sind die Tests erfolgreich, kann der Container nachher auf den produktiven Host gestartet werden. Bisher hat man das mit VM-Clones gelöst, was natürlich funktioniert (jedoch deutlich aufwendiger ist). Aufgrund der Flexibilität ist es auch möglich eine Applikation in die Breite skalieren zu lassen. Eine Webapplikation lässt sich zB. sehr einfach auf einer Vielzahl Hosts verteilen.

Es gibt inzwischen ein recht umfangreiches Repository von bereits fertigen Containern. WordPress ist hierfür ein gutes Beispiel (von diesem auch diese Website lebt).

Unser WordPress-Container wird auf einem CentOS-System gehostet. Der erste Schritt ist die Installation von Docker. Für RedHat und CentOS gibt es ein zusätzliches YUM-Repository, welches wie auf der Docker-Website beschrieben sehr einfach zu installieren ist:

[root@web01 ~]# cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Mit

yum install docker-engine

ist auch schon der Grundstein gelegt. Damit der Daemon auch nach einem Reboot läuft, ist es noch ein

systemctl enable docker.service

notwendig. Die Installation ist mit einem kleinen HelloWorld-Container zu testen. Mit

docker run hello-world

wird der Container aus dem Repository geladen und gestartet.

Aktuell ausgeführte Container können mit docker ps aufgelistet werden:

[root@web01 ~]# docker ps
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS |NAMES

8e6137f5f317 | hello-world | "/hello" |30 seconds ago | Exited (0) 29 seconds ago | | agitated_leakey

Möchte man auch gestoppte Container aufgelistet haben, ist die Option –a anzuhängen.

Hello-World läuft jetzt also, was ist mit WordPress? Für WordPress sind zwei Container notwendig, welche miteinander verlinkt sind. So gibt es einen Datenbank- sowie einen Applikations-Container. Installiert ist alles mit zwei Befehlen:

[root@web01 ~]# docker run --name heiterbiswolkig_mySQL -e MYSQL_ROOT_PASSWORD=‘MYSQL-Password' -d mysql:5.5

[root@web01 ~]# docker run --name heiterbiswolkig_WORDPRESS --link heiterbiswolkig_mySQL:mysql -P -p 80:80 -p 443:443 -d wordpress

Was bedeutet jetzt was? Die zwei wichtigsten Optionen sind “—name”, welche den Namen des Containers definiert und „-d“, welche auf den Container im Hintergrund laufen lässt. Die jeweiligen Ports können aus dem Container auf die IP des tatsächlichen Docker-Hosts gemappt werden (siehe die –p Optionen für Port 80 und 443). Applikationsspezifische Parameter können mit „-e“ übergeben werden – hier ist immer die Dokumentation zu beachten. Bei dem WordPress-Container ist zusätzlich noch der Link in den mySQL-Container zu sehen (–link).

Und? Läuft alles? Kontrolle mit docker ps:

CONTAINER ID       IMAGE               COMMAND                 CREATED             STATUS             PORTS                                     NAMES

0874fac0d43f       wordpress           "/entrypoint.sh apach"   8 seconds ago       Up 7 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   heiterbiswolkig_WORDPRESS

bb8dd6706002       mysql:5.5           "/entrypoint.sh mysql"   9 minutes ago       Up 9 minutes       3306/tcp

Sieht gut aus 🙂 Wie man sieht, werden auch die Ports entsprechend der Konfiguration auf den Docker-Host gemappt. Wechselt man in einen Browser und öffnet http://docker-host, wird das WordPress-Setup erscheinen. Einfacher geht es wohl kaum.

Das war natürlich ein vorgefertigter Container aus dem “Docker Hub”. Aber es demonstriert trotzdem wie einfach ein Host ohne Installation und Konfiguration von Abhängigkeiten mit einer Applikation bestückt werden kann. Man kann sich natürlich auch eigene Container „bauen“ und diese in einem eigenen Repository ablegen.

Ich bin jedenfalls begeistert und werde mich weiterhin mit der Thematik beschäftigen und hier meine Erfahrungen teilen. Wie geht es euch mit diesem Thema? Ist Docker schon in euer Leben/Alltag getreten? 🙂

Bis demnächst.

4 thoughts on “Auf Tuchfühlung mit Docker.”

Schreibe einen Kommentar

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.