De beste Docker containers

Noud van Kruysbergen
0

Inhoudsopgave

Het vinden van goede Docker containers valt niet mee. Het aanbod is bijna oneindig en vaak lossen ze alleen een deel van een probleem op. We hebben een selectie van images samengesteld waarvan we denken dat ze goed doordacht zijn, goed onderhouden worden en veel werk kunnen besparen.

Het lijkt soms makkelijker om de spreekwoordelijke speld in een hooiberg te vinden dan een goede container-image in Docker Hub. Meestal krijg je honderden zoekresultaten, waarvan er dan geen enkele echt van lijkt te deugen: te oud, vol met lekken of gigantisch groot. Of je vindt er een die op het eerste gezicht perfect lijkt te zijn, maar bij nader inzien toch niet kan wat je werkelijk zou willen. Hoe goed de containers hun taak daadwerkelijk uitvoeren, blijkt helaas vaak pas na een test in de praktijk. We hebben een aantal Docker-containers verzameld die we zelf gebruiken en bespreken ze hier. Verwijzingen naar die images in Docker Hub vind je bij de besprekingen van de afzonderlijke containers. Ook bij deze containers is het goed je de voordelen en nadelen van Docker te realiseren.

Onze selectie is vrij specifiek, maar kun je ook exemplarisch zien. Nextcloud en WordPress zijn bijvoorbeeld voorbeelden van complexere containerimages en TVheadend is een voorbeeld voor de omgang met hardware. Bij bijvoorbeeld Google Pagespeed is goed te zien hoe het compileren binnen een container in zijn werk gaat. Deze images dienen daardoor ook meer ter inspiratie en als voorbeelden voor eigen Docker-files en containers, zodat je een beetje een overzicht krijgt van wat er met containers allemaal wel niet kan.

Daarbij is Portainer meer een erg praktische tip voor een webinterface. Dat bespaart je het werken met de commandline en geeft een goed overzicht van de toestand van je eigen Docker-installatie(s). Watchtower is eveneens erg handig, daarmee kun je je eigen containers up-to-date houden.

De beste Docker containers

Portainer-io

Portainer-io

Docker-UI

Er zijn al veel grafische interfaces voor Docker gekomen en gegaan – maar Portainer is gebleven. De zelf als container aangeboden applicatie maakt het mogelijk in de browser alle containercomponenten uitgebreid te beheren: images, volumes, netwerken en registers. Verder nog wat bijzonderheden die het gebruik mogelijk maken van een Docker-swarm: een samenvoeging van meerdere serversystemen tot een cluster. Meerdere containers vormen daarbij net als bij het gebruik van docker-compose één grote applicatie. Voor die manier van werken, die in Portainer alleen in swarm-modus zichtbaar is, zijn sjablonen aan te maken. Maar ook zonder die mogelijkheden, die je eerder in een omgeving met Kubernetes en andere zwaargewichten zou verwachten, is Portainer goed te gebruiken.

In Portainer kun je gebruikers aanmaken en verschillende rechten aan afzonderlijke resources toekennen, zodat het systeembeheer ook taken kan delegeren. Voor de volledigheid moeten de standaardtaken nog even genoemd worden die Portainer afhandelt: het weergeven van logbestanden, de containerconsole in de browser toegankelijk maken, configuratiedetails bewerken en statistische data verzamelen en tonen.

Voor een veilige werking met TLS kunnen Portainer-gebruikers een aparte proxy zoals Træfik gebruiken. Voor gevorderde administrators is een SSH-poortforwarding wellicht ook een mogelijkheid.

Officiële image: ja, door ontwikkelaars
Platforms: amd64
Risiconiveau: gemiddeld
Complexiteit: enigszins

Bekijk deze container

Transmission

Transmission

Torrent-client met VPN

Als je bestanden via Bittorent distribueert, loop je het risico problemen met auteursrechten te krijgen. Zelfs als je dat helemaal niet schendt wordt het een lastig verhaal om jezelf juridisch te verweren. Toegang via VPN is een manier om je tegen dat ongemak te beschermen. Als de VPN-verbinding per ongeluk crasht, kan het zijn dat de torrent-client gewoon doorgaat met synchroniseren – maar dan onversleuteld. Dan ben je alsnog het haasje.

Dat probleem wordt met deze container opgelost. Hij maakt een verbinding naar een ingestelde VPN-server en start dan de torrent-client Transmission. Als de verbinding met de VPN-server afgebroken wordt, verhindert een firewallregel dat Transmission bestanden onversleuteld synchroniseert. Om de torrent-client bestanden snel te kunnen laten versturen en ontvangen, moet er een poort naar internet open worden gezet. Daar worden door de verschillende VPN-aanbieders verschillende mechanismen voor gebruikt. De container van Kristian Haugen werkt met meer dan 40 aanbieders. Mocht je eigen aanbieder daar niet tussen zitten, dan werkt ook een normale OpenVPN-verbinding.

Als de container eenmaal draait, zijn de openstaande poort en de webinterface van Transmission in het lokale netwerk bereikbaar. Door de geïntegreerde webproxy kun je de VPN-toegang ook meteen gebruiken om veilig te internetten.

Officiële image: nee
Platforms: amd64, armhf
Risiconiveau: gemiddeld
Complexiteit: gemiddeld

Bekijk deze container

Watchtower

Watchtower

Automatische back-ups

Als containers actief gebruikt worden, moeten ze regelmatig – of zelfs automatisch – geüpdatet worden. Al is het maar om security-lekken te dichten. Die eis is noodzakelijk als je zelf images maakt: die zijn pas echt af als ze automatische updates overleven zonder de configuratie of data te verliezen.

Watchtower kijkt of er voor de uitgevoerde containers nieuwe images klaarstaan. Als dat zo is, worden die images bijgewerkt en de containers herstart. Alle voor het starten aangegeven parameters worden daarbij over­genomen. Indien gewenst wordt er informatie over de activiteiten verstuurd via e-mail of via Slack en dergelijke.

Parameters maken het mogelijk om Watchtower alleen op geselecteerde containers los te laten, het interval te veranderen waarbinnen het actief moet worden en zelfs de manier van werken zodanig te wijzigen dat nieuwe images niet in een register, maar alleen lokaal gezocht worden. Dat laatste is zeker handig voor ontwikkelaars. Met de aan containers gekoppelde labels kun je Watchtower gedetailleerder aansturen. Watchtower update zichzelf.

Watchtower werkt in onze ervaring uitstekend. Als een container niet wil herstarten, ligt dat soms aan Docker, bijvoorbeeld als de netwerkinterfaces conflicten opleveren. Dat is dan alleen handmatig op te lossen – in het uiterste geval kun je de host herstarten. Soms kunnen bepaalde images gewoon niet tegen updates.

Officiële image: ja, door ontwikkelaars
Platforms: amd64, armhf
Risiconiveau: hoog
Complexiteit: enigszins

Bekijk deze container

Nginx met Pagespeed

Nginx met Pagespeed

Websites comprimeren

Wie hoog op de resultaten van Google wil komen, heeft een snelle en zo compact mogelijke website nodig. Speciaal daarvoor heeft Google de webserverplug-in Pagespeed ontwikkeld. Die haalt alle statische content binnen die de webserver levert en comprimeert die zo goed mogelijk. Het maakt Pagespeed daarbij niet uit of het om HTML, CSS of afbeeldingen gaat. De plug-in is geen zaligmakend middel voor uitgedijde CSS-bestanden, kapotte HTML en 5 MB grote thumbnails, maar hij perst er vaak toch nog een beetje extra uit dan de CMS-plug-ins.

De Pagespeed-uitbreiding is beschikbaar voor Apache en Nginx. Voor die eerste is het installeren redelijk onproblematisch, want daar zijn softwarepakketten voor. Bij Nginx moet je zelf aan het compileren. Als je geen Apache gebruikt, maar de Pagespeed-plug-in toch nodig hebt, moet je voor zowel de plug-in als Nginx handmatig bijhouden. Dat hoeft allemaal niet met deze image, want hij compileert automatisch Nginx met de Pagespeed-plug-in.

De container kun je voor andere webservers inzetten als reverse-proxy om hun reply’s meteen te comprimeren. Volgens de ontwikkelaar Werner Beroux is de image meer bedoeld als voorbeeld voor eigen Docker-files. Als je met de configuratiemogelijkheden van de Pagespeed-plug-in gaat experimenteren, moet je er wel goed op letten wat je doet.

Officiële image: nee
Platforms: amd64
Risiconiveau: laag
Complexiteit: hoog

Bekijk deze container

GitLab CE

GitLab CE

Softwarefabriek

De gebruikelijke criteria voor wat een goede container is, zijn in tegenspraak met de door GitLab gemaakte image. Die bevat niet alleen de GitLab-applicatie, maar bovendien ook PostgreSQL als database, Nginx als proxy en veel andere kleine processen waar een gebruiksklaar software-ontwikkelplatform als GitHub nu eenmaal uit bestaat. Bovendien gebruiken de makers Omni­bus om van de Ruby-omgeving een pakket te maken, ook als Docker-image, zoals dat bij een pakketgeoriënteerde installatie aan te raden is. Dat klinkt als gedoe, maar is in de praktijk handig omdat het bijwerken van een GitLab-installatie dan met een image-update snel gedaan is en niet over meerdere containers verspreid hoeft te gebeuren.

De uitrusting laat weinig te wensen over: Git-repository’s, bugtrackers, wiki, gebruikersbeheer, ­­CI/CD-­functies en zelfs een aan een project hangend register zitten allemaal in de GitLab-image. Er is zowel een community- als een enterpriseversie. Die laatste kost geld, maar biedt ook extra features. Die hebben vooral met projectmanagement te maken en veranderen niets aan de kernfuncties.

De image werkt betrouwbaar, maar reageert nogal nukkig als het systeem weinig opslagruimte meer heeft. Dan moet je handmatig lock-bestanden gaan opruimen. De zeer regelmatige updates verlopen vrij soepel. Als je de image te volumineus vindt is er ook Gitea, een slanker in Go geschreven alternatief.

Officiële image: ja, door ontwikkelaars
Platforms: amd64
Risiconiveau: laag
Complexiteit: enigszins

Bekijk deze container

Een uitgebreidere selectie en tips hoe je zelf goede en slechte containers herkent, vind je in c’t magazine.

Meer over Docker-containers in c't okt/2019

Containers en beveiliging

We hebben de geadviseerde containers uiteraard uitgebreid getest en gecontroleerd op securitylekken, maar niet iedere image zal over zes maanden nog net zo veilig zijn als nu. Je moet dan ook regelmatig controleren of de beheerders en ontwikkelaars hun eigen containers nog bijhouden. Als dat niet meer het geval is, moet je snel op zoek gaan naar een alternatief of zelf aan de slag gaan. Dat is – dankzij Docker – vaak geen probleem.

Het is sowieso zinvol te vertrouwen op groepen als het team achter Linux­server.io en die van de officiële Docker-pakketten, want daar kijken meteen meer mensen naar. Een individuele ontwikkelaar die zijn Docker-bestanden in zijn vrije tijd beheert en op een bepaald moment niet meer nodig heeft, kan zoiets niet bieden. Grote community’s zijn echter niet altijd een garantie voor een gevaarloos gebruik, zoals de MariaDB-image laat zien die nog werkt met Debian Jessie. Als je een bepaalde image op het oog hebt die je niet helemaal vertrouwt, kun je hem zelf proberen te evalueren.

Hoe je zelf goede en slechte containers herkent lees je in c't okt/2019

Het inschatten van de risico’s van bepaalde images is voornamelijk afhankelijk van hun privileges. Toegang tot maar enkele apparaten zoals bij de Tvheadend-image zal niet meteen een probleem opleveren. Maar lekken in de bijbehorende apparaatdrivers maken het voor aanvallers wel mogelijk om uit de containers te breken en toegang te krijgen tot het hostsysteem.

Images die het beheer van Docker vergemakkelijken, zoals Watchtower en Portainer dat doen, moeten praktisch altijd naar de Docker-socket kunnen schrijven. Via de socket kan een container de Docker-daemon en alle andere containers aansturen – met rootrechten. Daar moet je dan dus heel voorzichtig mee zijn.

(Merlin Schumacher, c’t magazine)

Deel dit artikel

Lees ook

Malware bekijken zonder risico, via je browser

Met de online sandbox any.run kun je malware bekijken zonder risico, via je browser. Vaak krijg je daar veel informatie mee boven water – en het is no...

Windows overzetten naar een nieuwe pc: tips en voorbereidingen

Er zijn verschillende manieren voor Windows overzetten naar een nieuwe pc, die allemaal hun voor- en nadelen hebben. We bekijken mogelijke opties.

Interessant voor jou

0 Praat mee

avatar
  Abonneer  
Laat het mij weten wanneer er