Testumgebungen mit Docker

Docker logo

Docker logo

Wenn Sie einen eigenen Root-Server nutzen, haben Sie oft das Problem, dass die Installation verschiedener Programmpakete wirklich komplex werden kann. Stellen Sie sich vor, sie benötigen „mal eben“ 15 WordPress Instanzen für eine Schulung oder wollen ein Programm ausprobieren, das nicht so wirklich zu Ihrem LAMP Stack passt wie beispielsweise die Blogsoftware Ghost oder das Diskussionsforum Discourse.

Docker bietet dafür eine Lösung.

Sie installieren die Docker Software auf Ihrem Betriebssystem und können dann sogenannte Images vom Docker Hub herunterladen.

Diese Images sind in etwa mit Legosteinen vergleichbar. Für die 15 WordPress Installationen benötigen Sie beispielsweise das WordPress und das MySQL Image. Danach können Sie beliebig viele MySQL und WordPress Container auf verschiedenen Ports starten. Variablenwerte wie MySQL Passworte werden beim Containeraufruf mitgegeben, so dass die beiden Images gut zusammenspielen können.

Die Container und die darin enthaltenen Daten können verwaltet werden. In unserem einfachen Fall können Sie beispielsweise nach Kursende gelöscht werden.

Docker ist natürlich viel mehr und erheblich komplexer, als ich das eben dargestellt habe, nichtsdestotrotz ist die Kernidee hinter Docker Installations- und Verteilungsprozesse zu vereinfachen. Es gibt Docker für Ubuntu, Mac OS X, Microsoft Windows, Amazon EC2, Arch Linux, CentOS, CRUX Linux, Debian, Fedora, FrugalWare, Google Cloud Platform, Gentoo, IBM Softlayer, Joyent Compute Service, Microsoft Azure, Rackspace Cloud, Red Hat Enterprise Linux, Oracle Linux und SUSE, und das ganze Projekt ist natürlich ein Startup und es geht um viel Geld und überhaupt …

Schauen Sie sich die beiden Videos und diese Link-Übersicht an, wenn Sie sich für die ganze Story interessieren.

Installation

Zunächst muss die Docker Software auf unserem Testserver installiert werden. Wir benutzen Ubuntu 14.04 LTS und aktualisieren zunächst mal.

sudo apt-get update
sudo apt-get upgrade

Docker orientiert sich am Kernel. Die Version Ihres Kernel erfahren Sie über den Befehl

$ uname -r
3.13.0-49-generic

Um Docker zu installieren, benötigen Sie nur einen Befehl (und natürlich das Paket wget -> apt-get install wget)

wget -qO- https://get.docker.com/ | sh

Sie werden nach dem Root Passwort gefragt und Docker wird installiert. Damit alles funktioniert, müssen Sie sich einmal ab- und wieder anmelden. Testen Sie dann, ob Docker korrekt installiert ist mit dem Befehl docker run hello-world. Der run Befehl versucht einen Container aus einem lokalen Image zu starten. Findet er kein Image, versucht er das entsprechende Image herunterzuladen, so wie hier in meinem Fall.

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
a8219747be10: Pull complete
91c95931e552: Already exists
hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:aa03e5d0d5553b4c3473e89c8619cf79df368babd18681cf5daeb82aab55838d
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

Das funktioniert also schon mal gut. Mit dem Befehl docker ps -a können Sie sich alle laufenden Container anzeigen lassen

$ sudo docker ps -a
CONTAINER ID IMAGE              COMMAND  CREATED       STATUS                   PORTS NAMES
2f6ab4eba9b0 hello-world:latest "/hello" 4 minutes ago Exited (0) 4 minutes ago       insane_elion

Sie können den Container stoppen mit dem Befehl

sudo docker stop insane_elion

insane_elion ist der Name, der für diesen Container vergeben wurden. Falls kein Name zur Verfügung steht, können Sie auch die ersten Ziffern der Container-ID nehmen.

Löschen können Sie einen Container mit dem Befehl

sudo docker rm insane_elion

Viele WordPress Installationen

Lassen Sie uns das Beispiel mit den 15 WordPress Installationen kurz durchspielen.

Sie müssen die Images WordPress und MySQL laden

sudo docker pull wordpress
sudo docker pull mysql

Sie müssen einen MySQL Container pro WordPress Instanz anlegen und ihm ein Passwort mitgeben, damit der WordPress Installer eine Datenbank anlegen kann.

sudo docker run --name mysql-wp1 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq1 -d mysql
sudo docker run --name mysql-wp2 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq2 -d mysql
sudo docker run --name mysql-wp3 -e MYSQL_ROOT_PASSWORD=8k6lgg35aq3 -d mysql
usw.
sudo docker run --name mysql-wpx -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxx -d mysql

Nun brauchen Sie jeweils eine WordPress Instanz, die mit dem MySQL Container verlinkt wird und auf einem bestimmten Port läuft

sudo docker run --name wp1 --link mysql-wp1:mysql -p 8081:80 -d wordpress
sudo docker run --name wp2 --link mysql-wp2:mysql -p 8082:80 -d wordpress
sudo docker run --name wp3 --link mysql-wp3:mysql -p 8083:80 -d wordpress

usw.

sudo docker run --name wpx --link mysql-wpx:mysql -p 80xx:80 -d wordpress

Mit dem Befehl

sudo docker ps -a

können Sie nachsehen, ob alles passt und wenn Sie nun im Browser den entsprechenden Port aufrufen, in meinem Fall http://serverblogger.ch:8081 und weitere, so erscheint jeweils der Web-Installer von WordPress.

WordPress Installation
WordPress Installation
An diesem Punkt werden Sie beginnen, fasziniert zu sein 🙂

Im Blogpost WordPress Testumgebungen in Docker ist dieses Beispiel noch ausführlicher erläutert.

Ein Beispiel für Joomla mit einem anderen Image

Ausser den offiziellen Images von Docker gibt es auch von Benutzern zur Verfügung gestellte Images. Ich möchte Ihnen ein Beispiel für Joomla zeigen. Sie müssen sich beim Docker Hub registrieren, um die zur Verfügung stehen Images durchsuchen zu können. Der Benutzer gjong hat beispielsweise ein Joomla Image gebaut, das alles enthält, was man so braucht. Sie installieren es mit dem Befehl

sudo docker pull gjong/apache-joomla

Das MySQL Passwort ist in diesem Fall leer und gjong empfiehlt diesen Startbefehl

sudo docker run -d -p 80:80 gjong/apache-joomla

Ich würde noch einen Namen mitgeben und ihn auf einem freien Port starten (nach der WordPress Apokalypse 🙂 ), sagen wir mal 8099

sudo docker run --name joomla1 -d -p 8099:80 gjong/apache-joomla

Rufen Sie mal den Port im Browser auf

Joomla Installer
Joomla Installer

Links


tl;dr: Mit Docker können Sie Software in Containern ausliefern und einfach verteilen.

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

Ein Gedanke zu „Testumgebungen mit Docker“

Kommentar verfassen