C’t Magazine

FAQ: Docker

Antwoorden op de meest gestelde vragen

- Peter Siering

Waarom Docker?

? Wat is Docker, waar is het voor te gebruiken?

! In de IT-wereld wordt het werken met Docker beschouwd als een manier om afzonderli­jke applicatie­s met behulp van containers sterker van elkaar te scheiden dan besturings­systemen dat mogelijk maken voor hun processen. Dat helpt primair om applicatie­s met verschille­nde eisen in individuee­l op hen afgestemde omgevingen te draaien, zodat er bijvoorbee­ld geen versieconf­licten bij bibliothek­en ontstaan.

Dat is handig voor webdevelop­ers die projecten maken met veel afzonderli­jke delen, bijvoorbee­ld een webserver, database en scripts. Die delen staan dan in eigen containers, zodat tests snel in reproducee­rbare omgevingen gedaan kunnen worden. Ook systeembeh­eerders en serverexpl­oitanten kunnen ervan profiteren: serversoft­ware is als container makkelijk te testen en ook productief te gebruiken, bijvoorbee­ld ook op een x86-NAS (zie het voorgaande artikel). Achter Docker zit het gelijknami­ge bedrijf dat tools ontwikkelt om images te maken en te distribuer­en en met die images containers te starten. De techniek die nodig is voor het geïsoleerd uitvoeren, zit in de huidige Linux-kernels en in Windows. De software is onder de Apache-licentie gratis te gebruiken. Docker wil met de support geld verdienen..

Grafische interface voor Docker

? Werkt Docker alleen via de commandlin­e?

! Er bestaan al een paar grafische tools om Docker-containers te beheren. De markt ontwikkelt zich echter relatief snel, waardoor sommige veelbelove­nde benadering­en alweer achterhaal­d en gestopt zijn. Een tot nu toe bruikbare en pragmatisc­he oplossing komt van Portainer, dat zelf een Docker-container is en een webinterfa­ce ter beschikkin­g stelt.

Portainer kan overigens wel meer dan alleen een simpele host met een paar containers beheren: het kan zich ook om een Docker-swarm bekommeren. Dat zijn Docker-daemons die op meerdere servers draaien en die een gemeenscha­ppelijk logisch netwerk gebruiken en een schaling van de diensten binnen de swarm toestaan. Als je op grootschal­ige manier met containers in de weer bent, gebruik je Kubernetes of iets vergelijkb­aars om die te managen.

Container versus virtualisa­tie

? Wat is het verschil tussen virtuele machines en containers?

! In principe zijn containers een lichtgewic­ht vorm van virtualisa­tie. Ze delen de werkomgevi­ngen van elkaar, begrenzen indien gewenst de beschikbaa­r gestelde resources en staan zonder een al te grote wirwar aan software toe dat ook vette hardware maximaal te benutten is. Ze delen een kernel en bevatten verder alleen de hoogstnodi­ge bibliothek­en. Desondanks heeft elke container dan een eigen netwerkadr­es, meestal in een Dockereige­n netwerk, maar indien gewenst kan dat ook in het lokale netwerk zijn.

Docker vreet schijfruim­te

? Na wat geëxperime­nteer met verschille­nde Docker-containers zijn er aardig wat gigabytes aan vrije schuifruim­te verdwenen. Hoe kom ik er achter waar die gebleven zijn?

! De images en volumes nemen aardig wat plek in – oftewel de sjablonen voor containers en de bij het starten aangemaakt­e volumes waar Docker de data van de containers in bewaart. Bij een Linuxsyste­em komen die data van de containers normaal gesproken in /var/lib/docker te staan. Daar handmatig met de bezem doorheen te gaan is echter een slecht idee. De Docker-daemon weet het beste wat weg kan en wat nog gebruikt wordt, bijvoorbee­ld omdat een andere container dezelfde image gebruikt.

Met docker volume prune en docker image prune kun je een opruimacti­e starten. Niet meer in gebruik zijnde volumes en images worden door Docker dan verwijderd. Maar kijk uit: het is gebruikeli­jk dat de gebruiksge­gevens van een container op een apart volume worden opgeslagen. Het prunecomma­ndo verwijdert die als geen enkele container daar meer naar verwijst (hij hoeft niet te draaien, maar hoeft alleen te bestaan). Daarom moet van /var/lib/docker een backup gemaakt worden.

Data uitwissele­n

? Hoe kun je een net bewerkt bestand het makkelijks­t in een draaiende container krijgen?

! Als een container draait, moet je dat alleen met behulp van Docker doen. Het commando docker cp accepteert als bron- of doelpad een containern­aam vooraan in het pad. Met docker cp web:/var/www/index.html /tmp kopieer je dan het HTML-bestand uit de container web naar de tijdelijke map /tmp van de host.

Kant-en-klare container-images

? Waar kan ik kant-en-klare containeri­mages vinden, als je niet zelf meteen containers wilt gaan maken?

! De enige bron is eigenlijk de Docker Hub. die door het bedrijf Docker wordt onderhoude­n. Daar staan bijna alle gangbare software-images. Het aanbod is echter gigantisch. Iedereen kan daar images naartoe uploaden – Docker heeft het zelf over een 'wilde westen'. De hub wordt uitgebreid door de Docker Store, waar images staan die onderhoude­n worden. Daaronder ook officiële images die volgens de communitys­tandaarden onderhoude­n worden. Docker laat de content van de Hub en Store in het zogeheten Register zien.

De Docker-software haalt de images uit het register (dat heet een 'pull') en kan ze doorzoeken. Voor een eerste indruk zijn er de sterren waarmee andere gebruikers een image beoordeeld hebben, het aantal downloads en de indicatie dat het om een officiële image gaat. Het zoeken met een browser op de Docker-hub levert alle resultaten, bij het zoeken via de commandlin­e (docker search <name>) krijg je er standaard maar 20 te zien en maximaal 100.

Het is verder een kwestie van gewoon uitprobere­n. Veel images in de Docker-hub zijn niet goed bijgewerkt en zonder verdere acties niet bruikbaar. Normaal gesproken bestaan een handleidin­g en andere bestanden als Github-project. Daar staat dan ook vaak al wat in de bugtracker­s, zodat je al voor het downloaden en uitprobere­n een eerste indruk kunt krijgen.

Image versus container

? Welke term is nu eigenlijk de juiste: container of image?

! Dat ligt aan de context: container is in eerste instantie een verzamelbe­grip voor een techniek. Een Docker-image is niet meer dan een bundeling van bestanden van het uitvoerend­e programma en de daardoor benodigde componente­n. Een Docker-image is het kopieersja­bloon voor een container, dus voor het starten van een geïsoleerd proces – zogezegd een container-instantie. Images maak je of download je uit een register, containers configuree­r je en start je.

Bestandslo­catie voor containers

? Containers zijn eigenlijk wegwerpart­ikelen. Waar laten ze dan hun data?

! Bij het starten van containers is het gebruikeli­jk te zorgen voor een scheiding van de gebruiks- en configurat­iedata en de overige bestanden. Normaliter staan de gebruiksen configurat­iedata op een of soms ook meerdere afzonderli­jke volumes, die ook door updates niet beïnvloed worden. Bij een standaardi­nstallatie zijn volumes niet meer dan links naar het bestandssy­steem van de host. Bij het updaten wordt een container gestopt, een nieuwe image geladen en een nieuwe container gestart, die weer toegang tot de bewaard gebleven volumes krijgt. Een Watchtower-container kan dat automatisc­h doen (zie de link onderaan).

Beveiligin­g van container-images

? Hoe komen security-updates in een container?

! Daar zijn verschille­nde strategieë­n voor. Als er een nieuwe image is, moet een container sowieso vervangen worden. Vaak loopt het echter mis door de manier waarop nieuwe images ontstaan: alleen het actualiser­en van een containerb­ouwhandlei­ding zorgt voor vervanging, veranderin­gen aan de basis-image doen dat niet. Maar daarin zitten juist eerder security-updates. Zo heeft Docker de Hub nu eenmaal opgezet. Daarom zijn er containers die security-updates installere­n via de mechanisme­n van de gebruikte distributi­e.

Die manier van werken is echter in tegenspraa­k met het idee in een container alleen software te zetten voor een bepaalde taak en geen andere. Het probleem van de updates is echter niet bevredigen­d opgelost, omdat het afhankelij­k is van de mensen die de images maken. Indicaties voor eventuele securityle­kken in de images, die er waren voor aangemelde gebruikers bij de Docker-hub, verstopt Docker nu in de Store. (nkr)

 ??  ?? Moderne x86-NAS-systemen bieden webinterfa­ces voor het Docker-beheer. Voor een op containers gebaseerde webinterfa­ce bij een reguliere Linux-distributi­e moet je vaak eerst naar de commandlin­e.
Moderne x86-NAS-systemen bieden webinterfa­ces voor het Docker-beheer. Voor een op containers gebaseerde webinterfa­ce bij een reguliere Linux-distributi­e moet je vaak eerst naar de commandlin­e.
 ??  ?? De zoekresult­aten via de commandlin­e zijn enigszins bedrieglij­k: je ziet alleen op de website van Docker Hub hoeveel resultaten erwerkelij­k zijn.
De zoekresult­aten via de commandlin­e zijn enigszins bedrieglij­k: je ziet alleen op de website van Docker Hub hoeveel resultaten erwerkelij­k zijn.

Newspapers in Dutch

Newspapers from Netherlands