Linux-Container erfreuen sich dank ihrer Be­nut­zer­freund­lich­keit einer hohen Be­liebt­heit und sind mitt­ler­wei­le ein wichtiger Be­stand­teil der IT-Si­cher­heit. Die na­mens­ge­ben­de Container-Plattform LXC (Linux-Container) wird ein­ge­setzt, um gleich mehrere Prozesse von­ein­an­der und vom Rest des Systems zu isolieren. Dabei wird durch Vir­tua­li­sie­rung ein Image erzeugt, das jeden Container von der Ent­wick­lung über die Testphase bis hin zum Betrieb durch­ge­hend por­tier­bar und kon­sis­tent bleiben lässt. So besitzen die einzelnen An­wen­dun­gen zwar eine virtuelle Umgebung, nutzen aber trotzdem ge­mein­schaft­lich den Kernel des Host­sys­tems.

Was leisten LXC bzw. Linux-Container, ist Ein­fach­heit immer ein Vorteil und wie viel virtuelle Maschinen steckt in einem Linux-Container?

Was ist LXC (Linux-Container)?

Der Begriff Linux-Container (LXC) steht sowohl für vir­tua­li­sier­te An­wen­dun­gen auf Linux-Basis, als auch für die zu­grun­de­lie­gen­de Container-Plattform bzw. -Tech­no­lo­gie. Dies ist ins­be­son­de­re dann im Hin­ter­kopf zu behalten, wenn von al­ter­na­ti­ven Container-Platt­for­men ge­spro­chen wird, die ebenfalls Linux-Container als Tech­no­lo­gie verwenden.

LXC ist eine Open-Source-Container-Plattform, die eine einfache Bedienung und – für Container-Systeme eher untypisch – ein in­tui­ti­ves, modernes Be­nut­zer­er­leb­nis ver­spricht. Dafür bietet die Plattform ver­schie­de­ne Tools, Sprachen, Templates und Bi­blio­the­ken an. Zudem lässt sich die Vir­tua­li­sie­rungs­um­ge­bung auf allen gängigen Linux-Dis­tri­bu­tio­nen in­stal­lie­ren und nutzen.

Tipp

Container sind ein ein­zig­ar­ti­ges Werkzeug, das beim Verwalten und Ent­wi­ckeln von An­wen­dun­gen auf eine Weise be­hilf­lich ist, die lange Zeit undenkbar war: Sie er­mög­li­chen es, An­wen­dun­gen zwar vom System zu isolieren, dabei aber nicht in Iso­la­ti­ons­haft zu befördern. Sie können weiterhin In­for­ma­tio­nen aus­tau­schen und mit der Außenwelt kom­mu­ni­zie­ren. Ihre Eta­blie­rung kam einer Re­vo­lu­ti­on gleich, mitt­ler­wei­le boomt die Container-Tech­no­lo­gie und es kon­kur­rie­ren unzählige Anbieter auf dem Markt. Zu den größten Container-as-a-Service-Anbietern zählen Amazon, Microsoft und Google. Die be­kann­tes­te Plattform ist Docker, eine Wei­ter­ent­wick­lung des Linux-Container-Projekts (LXC), das von allen CaaS-Anbietern un­ter­stützt wird.

Die Idee für die Linux-Container-Tech­no­lo­gie stammt bereits aus dem Jahr 2001. Im Rahmen des VServer-Projekts wurde erstmals eine isolierte Umgebung im­ple­men­tiert. Das war die Grundlage für die Ein­rich­tung von mehreren kon­trol­lier­ten Na­mens­räu­men (Name­spaces) in Linux und für das, was man heute Linux-Container nennt. Weitere Tech­no­lo­gien wie die cgroups (Control Groups), die die Res­sour­cen­ver­wen­dung für einen Prozess oder ganze Gruppen von Prozessen steuern und be­schrän­ken können, folgten. Mit systemd kam ein In­itia­li­sie­rungs­sys­tem für die Ver­wal­tung von Na­mens­räu­men und deren Prozesse hinzu.

In der Praxis sorgt LXC dafür, dass An­wen­dun­gen schneller ent­wi­ckelt werden können. Die Container-Technik hilft u. a. bei der Por­tie­rung, Kon­fi­gu­rie­rung und Iso­lie­rung. Auch beim Daten-Streaming in Echtzeit spielen die Container ihre Stärke aus, indem sie die not­wen­di­ge Ska­lier­bar­keit für An­wen­dun­gen be­reit­stel­len. Linux-Container passen sich der In­fra­struk­tur an, was sie in hohem Maße un­ab­hän­gig macht, sodass sie sowohl lokal, in der Cloud als auch in einer Hybrid-Umgebung ein­ge­setzt werden können.

Hinweis

Dass Container-Tech­no­lo­gien so gefragt sind, ist fol­gen­der­ma­ßen zu begründen: Jede Anwendung auf dem Be­triebs­sys­tem hat ihre Aufgaben und erledigt sie in genau dieser Umgebung. Sie stützt sich auf die vor­han­de­nen Kon­fi­gu­ra­tio­nen des Pro­gram­mie­rers, ist damit also abhängig von be­stimm­ten Bi­blio­the­ken, Zu­sam­men­hän­gen und Dateien. Um jedoch einfach, schnell und sicher eine neue Anwendung zu testen, kommen Container zum Einsatz: Dadurch kann eine neu ent­wi­ckel­te Anwendung ohne Um­schrei­bung, Feh­ler­be­sei­ti­gung und Probleme in einer vir­tu­el­len Umgebung ein­ge­setzt werden. Der Inhalt eines Con­tai­ners ist einer In­stal­la­ti­on einer Linux-Dis­tri­bu­ti­on nach­emp­fun­den, enthält alle Kon­fi­gu­ra­ti­ons­da­tei­en, ist aber viel leichter ein­ge­rich­tet als das tat­säch­li­che Be­triebs­sys­tem.

Was sind die Ziele und Features von LXC?

Das Prinzip von LXC scheint sich auf den ersten Blick nicht von dem Prinzip klas­si­scher Vir­tua­li­sie­rung zu un­ter­schei­den. Erst im Ge­samt­zu­sam­men­hang werden die Un­ter­schie­de deut­li­cher. Ein einfacher Grundsatz lautet fol­gen­der­ma­ßen: Container arbeiten auf der Ebene des Be­triebs­sys­tems, virtuelle Maschinen auf der Ebene der Hardware. Container teilen sich also ein Be­triebs­sys­tem und isolieren An­wen­dungs­pro­zes­se vom Rest des Systems, während klas­si­sche Vir­tua­li­sie­rung die gleich­zei­ti­ge Aus­füh­rung mehrerer Be­triebs­sys­te­me auf einem einzigen System er­mög­licht.

Hinweis

Damit in einer vir­tua­li­sier­ten Umgebung mehrere Be­triebs­sys­te­me gleich­zei­tig aus­ge­führt werden können, wird ein Hy­per­vi­sor zur Emulation des Hardware-Systems ein­ge­setzt, was al­ler­dings auch hohe Res­sour­cen erfordert. We­sent­lich kompakter ist hier der Einsatz von Server-Con­tai­nern, die nativ auf dem Be­triebs­sys­tem, also ohne Emulation, aus­ge­führt werden.

Linux-Container ver­brau­chen stan­dard­mä­ßig weniger Res­sour­cen als eine virtuelle Maschine und besitzen eine Stan­dard­ober­flä­che, wodurch sich gleich­zei­tig mehrere Container einfach und un­kom­pli­ziert verwalten lassen. Eine Plattform mit LXC kann sogar über mehrere Clouds hinweg or­ga­ni­siert werden – das bietet Por­ta­bi­li­tät und ge­währ­leis­tet, dass An­wen­dun­gen, die auf dem System des Ent­wick­lers korrekt laufen, auch auf jedem anderen System funk­tio­nie­ren. Über die Ober­flä­che der Linux-Container lassen sich selbst große Anwendung starten, stoppen oder deren Um­ge­bungs­va­ria­blen ändern.

Zu­sam­men­ge­fasst ist das Ziel von LXC, eine Umgebung zu schaffen, die einer Standard-Linux-In­stal­la­ti­on so nahe wie möglich kommt, ohne einen separaten Kernel zu benötigen.

Die aktuelle Linux-Container-Plattform verwendet folgende Kernel-Features, um An­wen­dun­gen und Prozesse in Container „ein­zu­schlie­ßen“:

  • Kernel-Na­mens­räu­me (ipc, uts, mount, pid, Netzwerk und Benutzer)
  • Apparmor und SELinux-Profile
  • Seccomp-Richt­li­ni­en
  • Chroots (unter Ver­wen­dung von pivot_root)
  • Kernel-Fä­hig­kei­ten
  • cgroups (Kon­troll­grup­pen)

Linux-Container sollen kompakt bleiben. Deshalb bestehen sie aus wenigen separaten Kom­po­nen­ten:

  • die liblxc-Bi­blio­thek
  • mehrere Sprach­bin­dun­gen für die API:
    • python3 (Langzeit-Un­ter­stüt­zung in 2.0.x)
    • lua (Langzeit-Un­ter­stüt­zung in 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • eine Reihe von Stan­dard­werk­zeu­gen zur Steuerung der Container
  • Vorlagen für Dis­tri­bu­tio­nen

Wie funk­tio­niert LXC?

Isolation und Vir­tua­li­sie­rung sind deshalb so wichtig, weil sie dabei helfen, Res­sour­cen und Si­cher­heits­aspek­te möglichst effizient zu verwalten. Sie er­leich­tern das Mo­ni­to­ring, um bei­spiels­wei­se Fehler im System zu finden, die oft nichts mit neu ent­wi­ckel­ten An­wen­dun­gen zu tun haben. Doch wie läuft das bei LXC? Oder anders gefragt: Wie funk­tio­nier­ten Linux-Container?

Der ein­fachs­te und sinn­volls­te Weg, Linux-Container ein­zu­set­zen, besteht darin, jeden Container mit einem Prozess zu verbinden – so behält man die komplette Kontrolle. Bei jedem Prozess sind dabei ins­be­son­de­re die Na­mens­räu­me wichtig, die Res­sour­cen für einen oder mehrere Prozesse verfügbar machen, die denselben Na­mens­raum verwenden. Nebenbei dienen die Prozesse als Zu­griffs­kon­trol­le, um die Container ab­zu­si­chern.

Für die Nutzung einer LXC-Umgebung müssen die Features und ihre Funk­tio­nen klar sein. Die cgroups (Kernel-Kon­troll­grup­pen) begrenzen und isolieren Res­sour­cen von Prozessen, etwa CPU, I/O, Ar­beits­spei­cher und Netz­werk­res­sour­cen. Außerdem kann der Inhalt einer Kon­troll­grup­pe verwaltet, überwacht, prio­ri­siert und be­ar­bei­tet werden.

Hinweis

Bei Linux ist alles eine Datei. Aus diesem Grund ist auch jede cgroup letztlich eine An­samm­lung von Dateien (/sys/fs/cgroup). Um diese Art von Dateien zu verwalten, gibt es ver­schie­de­ne Tools wie den cgmnager.

Die Funk­tio­nen sind über­schau­bar, was den großen Vorteil hat, dass eine LXC-Plattform sehr ein­steig­er­freund­lich ist. Welche Nachteile das jedoch mit sich bringt, soll im Folgenden gezeigt werden.

Die Vorteile und Nachteile von Linux-Con­tai­nern im Überblick

Die Be­nut­zer­freund­lich­keit von Linux-Con­tai­nern sind ihr größter Pluspunkt im Vergleich zu klas­si­schen Vir­tua­li­sie­rungs­tech­ni­ken. Die enorme Ver­brei­tung von LXC, ein nahezu all­um­fas­sen­des Ökosystem sowie in­no­va­ti­ve Tools sind al­ler­dings in erster Linie der Plattform Docker zu verdanken, die die Linux-Container etabliert hat. Im direkten Vergleich mit anderen Container-Systemen wie rkt, OpenVZ, Cloud Foundry Garden, die in ihrem Einsatz we­sent­lich be­grenz­ter sind, pro­fi­tiert LXC von der engen Bindung zu dem Vorreiter der Container-Platt­for­men.

Ein Sys­tem­ad­mi­nis­tra­tor, der zuvor mit einer hy­per­vi­sor­ba­sier­ten Vir­tua­li­sie­rung wie Hyper-V ge­ar­bei­tet hat, wird keine Probleme damit haben, LXC zu bedienen. Die gesamte Ein­rich­tung, von der Er­stel­lung der Container-Templates und ihrer Be­reit­stel­lung, der Kon­fi­gu­ra­ti­on des Be­triebs­sys­tems und der Ver­net­zung bis hin zur Be­reit­stel­lung von An­wen­dun­gen, bleibt gleich. Alle Skripte und Workflows, die für virtuelle Maschinen ge­schrie­ben wurden, lassen sich auch für Linux-Container verwenden. Ent­wick­ler bekommen damit keine neuen, maß­ge­schnei­der­ten Lösungen und Tools an die Hand, sondern können nahtlos in einer gewohnten Umgebung und mit ihren eigenen Skripten und Au­to­ma­ti­sie­rungs-Workflows wei­ter­ar­bei­ten.

Ein ent­schei­den­der Nachteil von LXC wird deutlich, wenn man auf die Spei­cher­ver­wal­tung schaut: Es werden zwar ver­schie­de­ne Speicher-Backends (Ivm, overlayfs, zfs und btrfs) un­ter­stützt, al­ler­dings wird stan­dard­mä­ßig direkt auf die Rootfs ge­spei­chert. Eine Re­gis­trie­rungs­mög­lich­keit von Images fehlt. Andere Container-Platt­for­men bieten hier smartere und fle­xi­ble­re Lösungen, sowohl für die Spei­che­rung von Con­tai­nern als auch für das Ma­nage­ment der Images.

Wann kommt LXC zum Einsatz?

LXC ist ein Open-Source-Projekt, das von canonical, dem Un­ter­neh­men hinter der Linux-Dis­tri­bu­ti­on Ubuntu, fi­nan­zi­ell un­ter­stützt wird. Der größte Support kommt jedoch aus der eigenen Community, die gemeinsam stabile Versionen und Si­cher­heits­up­dates ent­wi­ckelt und das Projekt vor­an­treibt. Ver­schie­de­ne Editionen von LXC genießen sogar bereits einen dau­er­haf­ten Support und re­gel­mä­ßi­ge Si­cher­heits­up­dates. Andere Versionen werden nach bestem Bemühen gewartet, in der Regel so lange, bis eine neuere, stabilere Version erscheint.

Linux-Container kommen in den meisten Fällen als un­ter­stüt­zen­de, zu­sätz­li­che Container-Tech­no­lo­gie zum Einsatz. Das ist in diesem Feld al­ler­dings nicht un­ge­wöhn­lich, denn im Gegensatz zu vir­tu­el­len Maschinen zählen Container noch immer als recht junge Tech­no­lo­gie. Es ist aber fest­zu­hal­ten, dass die Anbieter von Container-Lösungen kon­ti­nu­ier­lich wachsen und damit auch das Ökosystem rund um die Tech­no­lo­gie.

LXC ist aktuell eine absolut sinnvolle Al­ter­na­ti­ve für be­stehen­de tra­di­tio­nel­le An­wen­dun­gen, die sich besonders an VM-Admins richtet. Der Übergang von einer vir­tu­el­len Maschine zu einer Container-Tech­no­lo­gie ist mit Linux-Con­tai­nern einfacher als bei jeder anderen Container-Technik.

Welche Al­ter­na­ti­ven zu Linux-Con­tai­nern gibt es?

Die po­pu­lärs­te LXC-Al­ter­na­ti­ve ist Docker. Die Plattform, die auf Linux-Con­tai­nern aufbaut, wurde in den ver­gan­ge­nen Jahren kon­ti­nu­ier­lich wei­ter­ent­wi­ckelt, sodass sie in­zwi­schen auch auf Windows-Systemen läuft. Dadurch können auch die größten Cloud-Anbieter wie Google, IBM, AWS und Azure native Docker-Un­ter­stüt­zung anbieten.

Eine bekannte Container-Al­ter­na­ti­ve (Linux) für die Vir­tua­li­sie­rung kom­plet­ter Server ist OpenVZ. Wie LXC nutzt OpenVZ den Kernel des Host-Be­triebs­sys­tems und stellt Usern die vir­tu­el­len Server in iso­lier­ter Umgebung zur Verfügung.

KVM ist eine Open-Source-Vir­tua­li­sie­rungs­tech­no­lo­gie, die in Linux bereits eingebaut ist – KVM steht für „Ker­nel­ba­sier­te virtuelle Maschine“. Damit kann Linux in einen Hy­per­vi­sor um­ge­wan­delt werden, wodurch es dem Host-Rechner möglich ist, mehrere isolierte Um­ge­bun­gen aus­zu­füh­ren.

Ku­ber­netes kommt ur­sprüng­lich von Google, die einer der ersten Un­ter­stüt­zer von Linux-Container-Tech­no­lo­gien waren. Diese Open-Source-Plattform au­to­ma­ti­siert den Betrieb von Linux-Con­tai­nern. Ganze Gruppen von Hosts, auf denen die Container laufen, werden in Clustern zu­sam­men­ge­fasst und können so einfach verwaltet werden.

Hinweis

Wer sich mit LXC aus­ein­an­der­setzt, kommt an dem eng ver­wand­ten LXD nicht vorbei. Beide Begriffe bzw. Tech­no­lo­gien sind nur schwer von­ein­an­der zu un­ter­schei­den. Bei LXD handelt es sich um eine Wei­ter­ent­wick­lung von LXC, die u. a. einen System-Daemon enthält.

Zum Hauptmenü