Op de eerste dag van DockerCon EU 2017, was ik aanwezig bij een sessie van Abby Fuller (senior technical evangelist, AWS) over hoe efficiënte Docker files geschreven kunnen worden. Dat klinkt misschien niet heel erg spannend, maar was zowel voor de beginnende als de iets meer gevorderde Docker user handig om te volgen.
Er wordt namelijk vaak vergeten dat de opzet van een Dockerfile een groot verschil kan maken op de omvang van een Docker image. En dit heeft dus ook een behoorlijke impact op de download en opstart tijden van een image. Nu ben ik zelf ook al een paar jaar met Docker bezig en gaandeweg zie ook ik steeds meer dat het belangrijk is om de build van Docker images – en de daarmee gepaard gaande diskspace – onder controle te houden. Abby benadrukte dit nog eens door te zeggen dat deze sessie over diskspace zou gaan.
Bij het bouwen van een image begin je altijd met een base layer. Denk aan een CentOS, Ubuntu of Alpine. De layers uit het base image zijn read-only container layers en kan je verder niet aanpassen. Het is dus van belang om rekening te houden met de grootte van het OS en of dit aan de minimale eisen voldoet. Hoe kleiner het base image, des te kleiner zal het uiteindelijke resultaat uitvallen.
Bovenop het base image zitten een aantal thin layers waar je zelf de aanpassingen op maakt bij het bouwen van een Docker image. Hier ga je dus invloed op hebben. Hoe meer layers je in jouw image hebt, hoe groter deze wordt. Hierdoor duurt het langer om te pushen en te pullen vanuit een registry en zal het builden en deployen ook langer duren. Dit maakte in een oude monolitische omgeving misschien niet zoveel uit, maar in de wereld van microservices en veelvoudige builds en deployments maakt dit een groot verschil.
Als je deze regels goed hanteert ben je verzekerd van de snelst mogelijke Docker workflow in het geval van een pull/build of run.
Bekijk de hele presentatie van Abby Fuller terug op YouTube: