Containers zijn helemaal hip in de wereld van cloud computing en virtualisatie. Alhoewel de Linux kernel al meer dan tien jaar over containers beschikt, zijn ze vooral het afgelopen jaar in een stroomversnelling terecht gekomen. Er wordt zelfs gesproken van eenzelfde soort revolutie als, die virtuele machines ooit teweegbrachten ten opzichte van fysieke hardware. Eén van de belangrijkste spelers achter die revolutie is Docker, dat binnen korte tijd uitgroeide tot de facto marktleider voor containers. Maar met zo’n snelgroeiende markt is het natuurlijk een kwestie van tijd voordat er ook andere partijen op in gaan spelen. En dat is precies wat CoreOS doet met Rocket.

Wat is een container? Het idee is simpel: in plaats van een complete virtuele machine, die een heel systeem nabootst, wordt alleen één stukje software geïsoleerd. Het concept is al vrij oud, want in FreeBSD is het idee van een jail al jarenlang gemeengoed en hetzelfde geldt voor zones in Solaris. Het equivalent uit de oude UNIX-wereld is de “chroot”, waarbij alleen een gedeelte van de hiërarchie van het bestandssysteem toegankelijk is voor een applicatie. Containers, jails en zones zijn dus een soort “chroot op steroïden”. In plaats van dat alleen het bestandssysteem is geïsoleerd, geldt hetzelfde voor bijvoorbeeld het geheugen. Dat kon altijd al met een virtuele machine, maar daarbij heb je meteen een complete virtuele kopie van alle hardware functionaliteiten nodig. Bij elkaar opgeteld komt dat neer op een hoop extra RAM en processorkracht, die je eigenlijk liever wilt gebruiken waar het voor bedoeld is, in plaats van het afhandelen van een extra abstractielaag. Een container is juist lichtgewicht: het heeft maar een heel klein stukje van het besturingssysteem nodig om te kunnen functioneren, vaak zelfs maar de benodigdheden voor één enkel programma. Zo kun je op een fysieke server een hoop meer processen draaien. Dat betekent lagere kosten en dus meer inkomsten.

Docker is in korte tijd uitgegroeid tot het hipste bedrijf van cloud computing. De groei ging zelfs zo snel dat het inmiddels de standaard is geworden voor PaaS (Platform-as-a-Service) providers. Hoe is dat zo gekomen? Containers bestonden immers al lange tijd in de Linux kernel en nog ver daarvoor in FreeBSD. Als het echt alleen om het concept van een container ging, dan had iedereen inmiddels al wel FreeBSD gebruikt. De voornaamste reden is dat Docker het perfecte voorbeeld is van hoe (commercieel-georiënteerde) open source software viral kan gaan. Het is makkelijk te begrijpen en te gebruiken voor ontwikkelaars, het heeft een goede naam, een schattig logo en bijbehorende marketingstrategie, en het komt voort uit een kleine startup. Vooral dat laatste is niet te onderschatten. Als één van de giganten (zeg IBM of Red Hat) een container-technologie platform was begonnen, dan waren er inmiddels al twaalf verschillende standaarden van verschillende conglomeraten van bedrijven.

Docker-containers hebben een aantal kenmerken. Allereerst is de container geschikt voor allerlei soorten software en op verschillende systemen. Een softwarepakket gecompileerd op de laptop van een ontwikkelaar kan zonder problemen in een container in de cloud draaien. Bovendien is er de snelheid, want een container heeft nou eenmaal lagere systeemvereisten dan een virtuele machine. Daarnaast is de configuratie van een Docker-container erg gemakkelijk, omdat bijvoorbeeld door een applicatie te upgraden simpelweg de hele container wordt vervangen. Er zijn dus veel minder problemen met dependencies en het hele systeem kan simpelweg opnieuw worden gebouwd met containers als losstaande bouwstenen. Als laatste is er de Docker Hub App-store, waarbij voorgebouwde containers op een GitHub-achtige manier worden verspreid. Omdat containers losstaande bouwstenen zijn, kan je met het grootste gemak een door iemand anders gebouwde container gebruiken en dat scheelt een hoop moeite. Docker is gebouwd op standaard Linux containers, ook wel afgekort als LXC, maar dan op een veel gebruikersvriendelijkere manier en voor één enkele applicatie. Doordat Docker daarin excentriek is, is er een LXC-manier van werken en een Docker-manier van werken. Met andere woorden, Docker is niet alleen maar een makkelijke manier om containers te managen, het is een platform geworden.

Dat was één van de redenen waarom CoreOS – een lichtgewicht besturingssysteem gebaseerd op de Linux kernel – met Rocket kwam. Volgens de ontwikkelaars van Rocket was Docker te groot geworden. Met andere woorden: “schoenmaker blijf bij je leest”. CoreOS verweet Docker dat ze te veel met randzaken bezig waren in plaats van zich in te zetten voor een zo goed mogelijke containeroplossing.

Rocket werd groots aangekondigd op de Linux Collaboration Summit, een paar dagen voordat de DockerCon in Europa gepland stond. Dat, plus het feit dat Docker er een concurrent bij kreeg, zette kwaad bloed. Wat volgde was een amusante partij ordinair moddergooien van voornamelijk Solomon Hykes (één van de oprichters en CTO van Docker), die zijn bedrijf daarmee waarschijnlijk meer kwaad dan goed heeft gedaan. Het ging behoorlijk ver en de situatie is inmiddels gebruikt als voorbeeld van hoe je juist niet een open source project moet runnen, in onder andere een blogpost met de weinig vleiende titel “How Not To Manage An Open-Source Community, Courtesy Of Docker”.

Rocket verschilt van Docker op een paar cruciale punten. Werkend met een nieuwe App Container specificatie moet Rocket intern met duidelijke modules gaan werken. De uitvoer wordt gedaan in opeenvolgende stadia (vandaar ook de raket metafoor). De Docker daemon, die achter de schermen Docker containers in de gaten houdt, draait als root en is dus erg kwetsbaar. Veiligheid is daardoor ingewikkeld te garanderen en de makers van Rocket zien dat als een “fundamentele zwakte” van het Docker-model. Met andere woorden: Rocket claimt dat het terug naar de basis gaat. Een simpel containermodel met een focus op veiligheid en modulariteit. Daarmee wordt trouwens niet gezegd dat Rocket ook simpeler gaat worden. “Het gaat allemaal om prioriteiten”, aldus CoreOS CTO Brandon Philips. “Gebruikersgemak is goed om snel te groeien. Veiligheid vormt soms een barrière tot snelle adaptatie”. Maar dat wil niet zeggen dat gebruikersgemak belangrijker is dan veiligheid en dat is nu juist het probleem volgens Rocket.

Over die App Container: Rocket hoopt een algemene standaard voor containers te ontwikkelen met andere leden van de open source cloud computing gemeenschap en in samenspraak met bedrijven als IBM en Google. Rocket is in feite slechts maar een eerste implementatie van zo’n App Container concept. Daarmee wordt de App Container een serieus alternatief voor een ecosysteem dat vooralsnog afhankelijk was van wat Docker wilde.

In alle waarschijnlijkheid was dit pas het eerste salvo in een aankomende veldslag over de macht over containers in cloud computing. De tijd zal leren wat de uitkomst is. Het is in ieder geval een goed idee om competitie te hebben. Dat was dan ook het grootste punt van kritiek op Docker’s reactie op de nieuwe concurrent. “Forken” is fundamenteel voor open source. Machthebbers moeten wel samenwerken met ontwikkelaars, omdat ze anders een eigen weg inslaan. Als Docker beter had geluisterd naar de gemeenschap was Rocket wellicht nooit ontstaan en dan had Docker nu de containerwereld voor zichzelf gehad.

Links

http://readwrite.com/2014/12/04/docker-coreos-how-not-to-manage-open-source

http://www.docker.com

https://coreos.com/blog/rocket/