Docker ist eine Open-Source-Software, die beim Linux-Betriebssystem dazu verwendet werden kann, Anwendungen mithilfe von Betriebssystemvirtualisierung in Containern zu isolieren. Dies vereinfacht einerseits die Bereitstellung von Anwendungen, weil sich Container, die alle nötigen Pakete enthalten, leicht als Dateien transportieren und installieren lassen. Andererseits gewährleisten Container die Trennung der auf einem Rechner genutzten Ressourcen, sodass ein Container keinen Zugriff auf Ressourcen anderer Container hat (Quelle: Wikipedia). Beginnen wir mit der Installation der aktuellen Docker Version:
Key importieren: apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys Repository erweitern: sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list" Docker installieren: apt-get update apt-get install lxc-docker Docker starten: service docker status service docker start Apparmor muss installiert sein! apt-get install apparmor
Den ersten Container erzeugen wir, in dem wir eine BASH im Container starten:
docker run -t -i ubuntu /bin/bash
Da das Image von Ubuntu noch nicht vorhanden ist, wird dieses per PULL von Docker.io gezogen und anschließend durch die Parameter -i und -t eine Shell geöffnet. In dieser Shell installieren wir nun per APT-GET den Apache2 Webserver:
apt-get update apt-get install apache2
Diese jetzt getätigten Änderungen müssen in das Baseimage gesichert werden durch einen Commit. Ich Vergleiche hier Docker gerne mit Subversion für das Betriebssystem 😉 Den letzten laufenden Container kann man sich mit docker ps -l anzeigen lassen. Diese ID commited man nun und erzeugt so sein eigenes Image:
docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 28b692953462 ubuntu:latest "/bin/bash 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp prickly_kowalevski docker commit <ID> <Imagename> docker commit 28b692953462 mklehr/apache2 oder docker commit prickly_kowalevski mklehr/apache2
Die installierte Software (Apache2) in dem jetzt erzeugten Image kann man nun starten:
docker run -d -p 80:80 --name test1234 mklehr/apache2 /usr/sbin/apache2ctl -D FOREGROUND
Die Besonderheit: Apache2 kann nicht über das Startscript in /etc/init.d ausgeführt werden, sondern nur über apache2ctl. Stopt man nun diesen Container, sind die erzeugten Daten (z.B. von WordPress) im /var/www Ordner weg. Damit das nicht passiert, kann man in Docker „Volumes“ einbinden, die solche Änderungen lokal im System speichern. Dazu erzeugen wir einen Ordner im Filesystem der über docker run in den Container „gemounted“ wird.
mkdir /datastore/var-www docker run -d -p 80:80 -v /datastore/var-www:/var/www/html mklehr/apache2 /usr/sbin/apache2ctl -D FOREGROUND
Zur Überprüfung, ob der lokale Ordner auch genutzt wird, legen wir im lokalen Speicher eine „index.html“ ab. Diese sollte dann bei einem Seitenaufruf angezeigt werden.
Wenn unser Container zufriedenstellend läuft, kann man ihn ex- und auf einem anderen System importieren. Unabhängig von dem genutzten Linux auf dem Host!
docker save mklehr/apache2 > /root/mklehr-apache2.tar docker load < /root/mklehr-apache2.tar
Hier noch ein interessanter Link zu einem Artikel in den VMware Blogs zu Docker. Für die ersten Schritte empfehle ich das wirklich gut gemachte online Tutorial auf der Webseite von Docker.