Wat is Docker en hoe werken containers?
Auteur: Redactie Domeny.ForSale Gepubliceerd
Kort samengevat: Docker is een platform om applicaties te bouwen en uit te voeren in containers: geïsoleerde omgevingen met de benodigde bibliotheken en tools. Het helpt om vergelijkbare omstandigheden te creëren op de computer van de ontwikkelaar, tijdens tests en op de server. Het vervangt geen hosting en is geen volledige virtuele machine.
Hoe werkt Docker en wat is een container?
Een applicatie heeft niet alleen code nodig, maar ook een runtimeomgeving: bijvoorbeeld een bepaalde versie van Python, bibliotheken en systeemtools. Als die onderdelen per computer verschillen, kan een programma bij de ene persoon werken en bij de andere fouten geven. Docker helpt om deze afhankelijkheden op een reproduceerbare manier te beschrijven en klaar te zetten.
Een container is een draaiend proces of een groep processen die van de rest van het systeem zijn geïsoleerd. De applicatie ziet een eigen bestandssysteem en heeft een afgeschermde werkomgeving. Je kunt ook limieten instellen voor resources zoals geheugen en processorkracht.
Containers delen de kernel van het systeem: het onderdeel dat onder meer processen en hardware beheert. In een gebruikelijke Linux-omgeving gebruiken ze de kernel van de host. Om Linux-containers met Docker Desktop op macOS en Windows te draaien, is een Linux-laag nodig. Die wordt geleverd door een virtuele machine of een mechanisme zoals WSL 2.
Docker beperkt verschillen tussen omgevingen, maar neemt ze niet volledig weg. De processorarchitectuur, configuratie, netwerktoegang en externe diensten waarmee de applicatie verbinding maakt, blijven van belang.
Image, Dockerfile en volume — de basisbegrippen
Om een doorsnee project te begrijpen, moet je een paar onderdelen kunnen onderscheiden:
- Image — een kant-en-klaar sjabloon met de applicatiebestanden, afhankelijkheden en informatie die nodig is om de applicatie te starten. Vanuit één image kun je meerdere containers starten.
- Dockerfile — een tekstbestand met instructies om een image te bouwen, zoals het kiezen van een basisimage, het installeren van bibliotheken en het kopiëren van code.
- Imageregister — een plek waar images worden opgeslagen en beschikbaar gesteld. Een voorbeeld is Docker Hub; een organisatie kan ook een privéregister gebruiken.
- Volume — opslagruimte voor gegevens die door Docker wordt beheerd en waarvan de levensduur losstaat van die van een afzonderlijke container.
- Docker Compose — een tool waarmee je meerdere samenhangende services in één bestand kunt beschrijven en samen kunt starten.
Het verschil tussen een image en een container lijkt op het verschil tussen een documentsjabloon en een geopend document dat op basis daarvan is gemaakt. Het image blijft het uitgangspunt, terwijl elke container een eigen uitvoeringsstatus en een beschrijfbare bestandslaag heeft.
Bewaar databasegegevens niet uitsluitend in de beschrijfbare laag van een container. Alleen de container stoppen verwijdert die gegevens niet, maar bij het verwijderen van de container gaat deze laag verloren. Met een volume blijven de gegevens behouden wanneer je de container vervangt. Een volume vervangt echter geen back-up en kan zelf ook worden verwijderd.
Docker tegenover een virtuele machine
Een virtuele machine draait een afzonderlijk besturingssysteem met een eigen kernel. Een container heeft geen volledig gastbesturingssysteem nodig, omdat hij een gedeelde kernel gebruikt. Daardoor starten containers doorgaans sneller en hebben ze minder resourceoverhead dan volledige virtuele machines.
Dat betekent niet dat Docker altijd de betere keuze is. Een virtuele machine is nuttig wanneer je een afzonderlijk systeem, een andere kernel of een sterkere scheiding nodig hebt. Containers zijn geschikt om applicatieservices te verpakken en uit te voeren, maar hun isolatie mag je niet gelijkstellen aan die van een afzonderlijke machine.
Deze oplossingen worden vaak samen gebruikt: op een gehuurde virtuele server kun je Docker draaien, met daarin meerdere containers. De hosting levert dan de resources, terwijl Docker structuur aanbrengt in de manier waarop applicaties worden gestart.
Voorbeeld: een website met een applicatie en database
Stel dat je een website met een klantenportaal bouwt. Het project vereist een applicatie in Python en een PostgreSQL-database. Zonder containers moet ieder teamlid zelf compatibele versies van beide onderdelen installeren en instellen hoe ze samenwerken.
Met Docker Compose kun je twee services beschrijven: de applicatie en de database. Elke service draait in een eigen container en ze communiceren via een gedeeld netwerk. De PostgreSQL-gegevens worden in een volume opgeslagen en een gekozen poort van de applicatie wordt op de computer van de gebruiker toegankelijk gemaakt.
Een gebruikelijke werkwijze ziet er zo uit:
- Het team legt de instructies om de applicatie te bouwen vast in een Dockerfile-bestand.
- In het Compose-bestand beschrijft het team de services, het netwerk, het volume en de vereiste instellingen.
- De ontwikkelaar haalt het project binnen, vult de lokale configuratie aan en voert
docker compose up --builduit. - Docker bouwt het image van de applicatie, haalt het benodigde database-image op en start de containers.
De opdracht werkt alleen als het project goed is voorbereid en Docker draait. Bij het uitrollen naar een server moet je nog steeds zorgen voor wachtwoorden, een TLS-certificaat, back-ups, updates en monitoring. Een lokale configuratie is niet automatisch een veilige productieconfiguratie.
Wanneer is Docker nuttig en hoe begin je?
Docker is vooral nuttig als een project meerdere services heeft, het team een consistente omgeving nodig heeft of de applicatie vaak naar een server wordt uitgerold. Het maakt het ook eenvoudiger om verschillende versies van afhankelijkheden te testen zonder ze rechtstreeks op het hoofdsysteem te installeren.
Voor een eenvoudige statische website of een enkel script kunnen de extra bestanden en het beheer van containers onnodig werk opleveren. Gewone gedeelde hosting biedt bovendien niet altijd de mogelijkheid om Docker te draaien. Vraag dit na bij de aanbieder.
Begin met een klein project en start één service. Gebruik een vertrouwd image, raadpleeg de documentatie ervan en stel alleen de benodigde poorten open. Controleer in de officiële documentatie van Docker hoe je het op jouw systeem installeert en wat de actuele licentievoorwaarden van Docker Desktop zijn, vooral voordat je het zakelijk gebruikt.
Zie ook: Wat is een CDN?
