Open Source im professionellen Einsatz
Linux-Magazin 05/2014
© kamonrat meunklad, 123RF

© kamonrat meunklad, 123RF

Modul-Installation für mehrere Linuxe testen

Erhebendes am Dock

Wer Programme in der weiten Welt zu verteilen gedenkt, sollte sie vorab fit für fremde Kulturen machen. Um seine selbst verfassten Perl-Module auf mehreren Linux-Distributionen in einem Rutsch zu testen, schnappt sich Perlmeister Schilli die Linux-Containers-Technik und das ressourcenschonende Docker-Projekt.

675

Virtualisierung als Allheilmittel? Nein! Statt die gesamte Hardware samt Operationssystem zu abstrahieren, baut das Docker-Projekt auf den in neueren Linux-Kerneln vorhandenen Support für Linux-Container (LXC, [2]) auf und isoliert diese auf Prozessebene. Für Container statt für die klassische Virtualisierung sprechen erhebliche Einsparungen beim Speicherbedarf und beträchtliche Performancegewinne. Wenn auf jedem Server mühelos ein Vielfaches an voneinander abgekapselten Applikationen läuft, eröffnen sich ganz neue Möglichkeiten im Rechenzentrum.

Wie bei echter Virtualisierung entkoppeln isolierte Container ihre Komponenten voneinander. Der Vorteil: Benutzen zum Beispiel zwei Applikationen die gleiche Library, diese aber in unterschiedliche Versionen, ist dies kein Hinderungsgrund, denn jeder Container bringt alles Notwendige selbst mit.

Das Docker-Projekt [3] setzt auf den LXC-Features neuerer Linux-Kernels auf und fährt einen Daemon hoch, der alle Docker-Container verwaltet [4]. Er läuft auf dem Hostsystem genauso wie in einer VM. Wer also noch ein älteres System betreibt, das Docker noch nicht im Kernel unterstützt, erzeugt einfach mit Vagrant [5] beispielsweise ein Ubuntu-13-Image und installiert dort Docker mit den Anweisungen aus [6].

Docker-Container bieten viel mehr als LXC allein, angefangen von einem standardisierten Applikationsformat, das es erlaubt, auf einem Linux-System definierte Container auf jedem anderen Docker-System zu benutzen, bis hin zu geschichteten Dateisystemen. Dabei setzt eine Applikation auf einem Base-Image auf, Docker definiert nur die Differenzen und versioniert sie angenehmerweise mit Git-ähnlicher Präzision.

Docker definiert zudem eine Netzwerkschnittstelle zwischen den Containern, sodass die darin laufenden Applikationen über Unix-Ports miteinander kommunizieren können. Dass User einmal definierte Docker-Container in einem öffentlichen oder privaten Repository zur Nachnutzung ablegen dürfen, mehrt die Akzeptanz in der Docker-Community zusätzlich. Das Projekt ist gut ein Jahr alt und die Software laut seinen Entwicklern seit Version 0.8 produktionsreif.

Dieser Perl-Snapshot macht sich die Docker-Technik für Tests an selbst geschriebenen CPAN-Modulen zu Nutze. Dazu wird er mehrere Container mit verschiedenen Linux-Distributionen anlegen, um dann automatisch zu testen, ob sich der Tarball eines CPAN-Moduls darauf installieren lässt.

Online PLUS

In einem Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/2014/05/plus

Wohncontainer mit Inneneinrichtung

Einen neuen Container holt der User zunächst als Basisversion aus dem öffentlichen Repository und steigt dann hinein, um ihn entsprechend den Anforderungen einzurichten. So angelt

docker pull ubuntu
docker run -i -t ubuntu /bin/sh

ein etwa 200 MByte großes Ubuntu-Image aus dem Netz und öffnet dann eine Shell im Container. In ihr darf der User mit »apt-get update« und »apt-get install« nach Herzenslust neue Ubuntu-Pakete installieren. Die Option »-i« legt den interaktiven Modus fest, »-t« öffnet ein Pseudoterminal zum Bedienen der Shell.

Um Container hingegen maschinell einzurichten, gibt es die Datei »Dockerfile« , wie Listing 1 eine als Beispiel zeigt. Sie legt mit der Direktive »FROM« fest, von welchem Basis-Image der Container abzuleiten ist – in diesem Fall »ubuntu« . Neben dem Standard-Image fördert das Kommando »docker search ubuntu« noch 683 weitere Images zutage, die zum Download bereitstehen.

Die mit dem Schlüsselwort »RUN« eingeleiteten Zeilen im Dockerfile schicken Kommandos, mit denen »docker« den Container anpassen wird. Nach einem »apt-get update« zum Auffrischen des Paketindex installieren die Zeilen 5 und 6 im Perltest-Container die Pakete »libwww-perl« zum Herunterladen von CPAN-Modulen und das Utility »make« zum Bauen und Testen derselben.

Listing 1

ubuntu/Dockerfile

1 FROM ubuntu
2
3 RUN apt-get -y update
4 RUN apt-get -y install cpanminus
5 RUN apt-get -y install make
6 RUN apt-get -y install libwww-perl

CPAN minus als Plus

Das Paket »cpanminus« aus Zeile 4 bringt das Utility »cpanm« mit, das nicht nur CPAN-Module testet und installiert, sondern auch Distributions-Tarbälle entpackt und deren Unit-Testsuite startet. Das ist nicht immer trivial, denn Perl-Module definieren oft Abhängigkeiten zu anderen CPAN-Modulen, die erst einmal eingeholt, getestet und installiert werden müssen, bevor die Installation des eigentlichen Moduls beginnen darf.

Alle Container, mit denen dieser Snapshot rangiert, installieren dieses Utility entsprechend den Erfordernissen der jeweiligen Linux-Distribution. Damit kann das Testskript, das den Tarball in allen konfigurierten Containern testet, dort jeweils ein einheitliches Kommando aufrufen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 10/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.