Bij het ontwikkelen van applicaties moet je vaak complexe databases, programmeertalen, frameworks, dependencies en meer beheren. Bovendien kun je te maken krijgen met compatibiliteitsproblemen bij het werken met verschillende besturingssystemen (OS’en). Elk van deze variabelen kan je workflow negatief beïnvloeden.
Om deze problemen op te lossen kun je Docker gaan gebruiken. Met deze tool kun je applicaties bouwen en beheren in gecontaineriseerde omgevingen. Uiteindelijk kan Docker veel ingewikkelde configuratietaken wegnemen en de ontwikkeling gemakkelijker en efficiënter maken.
In dit artikel beantwoorden we de vraag “wat is Docker?” en leggen we uit hoe het werkt. Daarna laten we je enkele van de belangrijkste use cases zien en hoe je als beginner aan de slag kunt. Laten we beginnen!
Wat is Docker?
Wat is Docker nu precies? Het is een open-source platform voor het ontwikkelen van applicaties in een sandbox. Zijn lichtgewicht gevirtualiseerde omgevingen zijn ook bekend als containers:
Hoewel containers al sinds 1979 bestaan, heeft Docker ze toegankelijker gemaakt. Met behulp van Docker kunnen ontwikkelaars hun applicaties lokaal of op een productieserver bouwen, testen en deployen.
Sinds de release van Docker 1.0 in 2014 heeft het het gebruik van containers gestandaardiseerd voor zowel individuele ontwikkelaars als bedrijven. Nu heeft het meer dan 13 miljoen gebruikers, waaronder grote bedrijven als Netflix, Target en Adobe:
Bovendien neemt de adoptie van Docker elk jaar toe. Volgens Datadog is bijna 25% van de bedrijven Docker gaan gebruiken om hun applicaties te monitoren. Sinds 2015 is dit percentage elk jaar met 3 tot 5 procentpunten gegroeid:
Zoals we kunnen zien is Docker een populair platform geworden voor het ontwikkelen en deployen van applicaties. Om de populariteit ervan verder te begrijpen, laten we eens in meer detail kijken naar hoe de Docker software werkt.
Docker vs virtuele machines
In Docker kun je een applicatie verpakken in een gestandaardiseerde unit, die gebruikt kan worden voor softwareontwikkeling. Deze unit, of container, bevat de codering en de dependencies van de applicatie, zodat die gemakkelijk op elke computeromgeving kan draaien.
Vóór Docker gebruikten bedrijven vaak Virtuele Machines (VM’s) om applicaties te draaien. Deze kunnen fysieke computers emuleren, zodat ontwikkelaars van één server meerdere servers kunnen maken. Deze aanpak kan echter enkele nadelen hebben.
Elke VM bevat een volledige kopie van het besturingssysteem en de applicatie, en ook de benodigde binaire bestanden en bibliotheken. Deze bestanden kunnen tientallen GB’s in beslag nemen op een computer. Ook kan het virtualiseren van de hardware voor een gast-OS aanzienlijke overheadkosten met zich meebrengen.
In plaats van de hardware te virtualiseren, virtualiseren containers het besturingssysteem. In Docker zijn containers abstracties op de app-laag die zowel code als dependencies kunnen bevatten. Op dezelfde machine kunnen meerdere containers draaien als geïsoleerde processen:
Daardoor nemen Docker containers doorgaans minder ruimte in beslag. Ze kunnen ook meer applicaties bevatten zonder evenveel VM’s en OS’en.
Hoe werkt Docker?
Stel je voor dat je vracht van de ene plaats naar de andere probeert te verschepen. In de moderne tijd kun je dat gemakkelijk doen met containers. Deze houden bepaalde voorwerpen bij elkaar in een afgesloten omgeving, zodat ze vervoerd kunnen worden door schepen, treinen of vliegtuigen.
Docker werkt op een vergelijkbare manier. Simpel gezegd heeft Docker de methode voor het ontwikkelen en inzetten van software gestandaardiseerd.
Docker werkt met containers. Deze kunnen herbruikbare componenten hebben, zoals Python, Node, dependencies en meer. Vervolgens kun je de containers overal deployen zonder je zorgen te maken over compatibiliteitsproblemen.
Docker kan in het begin ingewikkeld zijn, dus laten we alle belangrijke componenten bespreken die betrokken zijn bij deze software. Als je deze belangrijke features eenmaal begrijpt, kun je de ontwikkeling van je applicaties stroomlijnen!
Docker engine
Docker Engine is de client-server technologie voor het bouwen en containeren van applicaties in Docker. In wezen ondersteunt het alle taken die komen kijken bij het draaien van je op containers gebaseerde applicatie:
Dit zijn de belangrijkste componenten binnen de Docker Engine:
- Docker Daemon: Beheert Docker images, containers, netwerken en volumes. Het luistert ook naar Docker API verzoeken en verwerkt ze.
- Docker Engine REST API: Een door Docker ontwikkelde API die communiceert met de daemon.
- Docker CLI: De commandoregelinterface voor communicatie met de Docker daemon.
Met de Docker Engine kun je gecontaineriseerde applicaties draaien op elke infrastructuur. Deze opzet draagt bij aan de toonaangevende containerruntime van Docker.
Docker image
Een Docker image is een uitvoerbaar pakket software dat alle broncode, dependencies en tools bevat die nodig zijn om een applicatie te draaien. Images zijn alleen-lezen templates die instructies geven voor het maken van een container.
Je kunt Docker images beter begrijpen door ze te zien als blauwdrukken. Ze bevatten snapshots van wat een container zal bevatten als hij draait.
In een image zijn er meerdere gestapelde lagen. Als je bijvoorbeeld een webserver image wilt bouwen, kun je eerst Ubuntu Linux opnemen. Vervolgens kun je er een laag Apache en PHP codering overheen leggen.
Bij het maken van een Docker image kun je het beste de meest variabele lagen hoger in de stack plaatsen. Als je dan een verandering moet aanbrengen, hoef je niet de hele image opnieuw te bouwen.
Docker container
Zoals we eerder bespraken, zijn containers vitale onderdelen van Docker. Eenvoudig gezegd is een Docker container een geïsoleerde ruimte voor een applicatie om te draaien zonder de rest van het systeem te beïnvloeden. Deze eenheid van software verpakt alle code en dependencies, zodat die gemakkelijk van de ene applicatie naar de andere kan worden overgezet.
Hier zijn enkele voordelen van het gebruik van Docker containers:
- Standaard: Hoewel containers al tientallen jaren bestaan, heeft Docker de industriestandaard voor het gebruik ervan gecreëerd. Docker containers zijn ongelooflijk draagbaar en gemakkelijk te gebruiken.
- Lichtgewicht: Omdat containers de kernel van het OS delen, heb je niet voor elke applicatie een ander OS nodig. Daardoor kan je app efficiënter draaien en server- en licentiekosten verlagen.
- Veilig: In tegenstelling tot VM’s isoleren containers applicaties, waardoor ze veiliger zijn. Met Docker hebben je containers standaard isolatiemogelijkheden.
Uiteindelijk bieden Docker containers meer voordelen dan VM’s. Hoewel ze resources op een vergelijkbare manier isoleren en toewijzen, zijn containers meestal draagbaarder, efficiënter en veiliger.
Docker Compose
Docker Compose is een tool dat is ontworpen om meerdere containers als een enkele dienst te draaien. Als je applicatie zowel NGINX als MySQL nodig heeft, kun je met Docker Compose één bestand maken dat beide containers start. Hierdoor hoef je niet elke container afzonderlijk te starten.
Hier zijn de drie basisstappen bij het gebruik van Docker Compose:
- Maak een Dockerfile om de omgeving van de applicatie te definiëren, zodat die gereproduceerd kan worden.
- Definieer elk van de diensten van je applicatie in een docker-compose.yml bestand zodat ze in een geïsoleerde omgeving kunnen draaien.
- Gebruik het Docker Compose commando om je applicatie te starten en te draaien.
In wezen zorgt Docker Compose ervoor dat meerdere containers geïsoleerd kunnen draaien. Ze kunnen echter met elkaar communiceren als dat nodig is.
Compose kan je bijvoorbeeld helpen om de dienstafhankelijkheden van je applicatie, zoals databases, caches of web service API’s, aan te maken en te configureren.
Dockerfile
Een Dockerfile is een tekstdocument met instructies voor het bouwen van Docker images. Door dit bestand te lezen zal Docker automatisch nieuwe images bouwen.
Het commando docker build
maakt een image van een Dockerfile en een context. Deze context is een verzameling bestanden die in een opgegeven pad of URL ligt.
Voer eerst het volgende commando in:
docker build
Dit stuurt de hele context naar de Docker daemon. Om naar een Dockerfile in je bestandssysteem te wijzen, gebruik je dit commando:
docker build -f /path/to/a/Dockerfile
Als de build succesvol is, kun je een repository en tag opgeven waar je de nieuwe image wilt opslaan:
docker build -t shykes/myapp
Dan zal de Docker daemon een validatie van het Dockerbestand uitvoeren. Als er een probleem is met de syntaxis, zal het een fout teruggeven.
Docker Desktop
Om Docker te gaan gebruiken op je Mac, Linux of Windows omgeving kun je Docker Desktop installeren. Het biedt een eenvoudige, gebruiksvriendelijke interface voor het beheren van containers, applicaties en images op je pc:
Met Docker Desktop hoef je de commandoregel niet te gebruiken om essentiële taken uit te voeren. Dit kan de ontwikkelingsworkflow versnellen:
Het komt ook met een ingebouwde Extensions Marketplace die het gemakkelijk maakt om te beginnen met het gebruik van externe ontwikkelaarstools. Dit is onder andere software voor het debuggen, testen en beveiligen van je applicaties:
Bovendien is Docker Desktop gratis voor persoonlijk en klein zakelijk gebruik. Houd er echter rekening mee dat grotere bedrijven een abonnement moeten aanschaffen, vanaf $5 per maand.
Docker Hub
Docker Hub is een platform waar je containerimages kunt vinden en delen. Het is de grootste repository van containerimages wereldwijd, met resources van ontwikkelaars uit de community, open-source projecten en Independent Software Vendors (ISV):
Hier zijn enkele features opgenomen in de Docker Hub:
- Repositories voor het pushen en pullen van container images
- Maak teams en organisaties aan met toegang tot privérepositories
- Docker Official images
- Docker Verified Publisher images
- Maak containerimages van GitHub of Bitbucket en push ze naar Docker Hub
- Acties triggeren met webhooks
Om Docker Hub te gaan gebruiken, moet je je eerste repository aanmaken. Je hoeft het alleen maar een naam te geven en de zichtbaarheid ervan op te geven:
Vervolgens kun je Docker Desktop downloaden en beginnen met het pushen en pullen van containerimages van Docker Hub. Je ziet deze pushes onder de nieuwste tag in je nieuwe repository.
Waarvoor wordt Docker gebruikt?
Docker is vooral bedoeld voor DevOps en ontwikkelaars. Met deze tool kunnen ontwikkelaars applicaties maken, aanpassen en inzetten als draagbare en lichtgewicht containers. Deze opstelling verpakt al zijn dependencies in een enkele unit, die op vrijwel elk OS kan worden uitgevoerd.
Hier is een typische use case voor Docker:
- Ontwikkelaars schrijven lokaal code en delen die vervolgens met hun teams met behulp van Docker containers.
- Ze pushen de applicatie naar een testomgeving waar het gemakkelijk is om geautomatiseerde en handmatige tests uit te voeren.
- Als er bugs worden gevonden, lossen ontwikkelaars die op in de ontwikkelomgeving. Om de wijzigingen te testen, herinstalleren ze die in de testomgeving.
- Nadat de ontwikkelaars de bug hebben opgelost, wordt de bijgewerkte image naar de productieomgeving gepusht.
Met behulp van deze workflow kun je nieuwe software uitproberen zonder een handmatige installatie uit te voeren. Je vindt het bijvoorbeeld moeilijk en vervelend om een MySQL server op te zetten. In plaats daarvan kun je de Docker CLI gebruiken om deze taak met slechts één commando uit te voeren.
Omdat Docker zijn eigen CLI heeft, kunnen beginners die gebruiken om te leren hoe je een commandoregel bedient. Na het opzetten van Docker in een Linux omgeving, kun je beginnen met het gebruik van Linux commando’s. Daarna kun je sneller en efficiënter systeembeheertaken uitvoeren.
Als je bovendien wilt beginnen met het ontwikkelen van lokale, offline WordPress sites, kun je Docker gebruiken om DevKinsta te installeren. Onze ontwikkelsuite is op Docker gebaseerd, waardoor je sites als individuele containers kunt maken en beheren:
Vergeleken met andere lokale ontwikkeltools gebruikt DevKinsta minder resources, terwijl het een bijna-native prestatie behoudt. Met een door Docker aangedreven DevKinsta site kun je WordPress snel en veilig ontwikkelen. Bovendien maakt DevKinsta het gemakkelijker om testmails te versturen en andere administratieve taken uit te voeren.
Voor- en nadelen van het gebruik van Docker
Nu je de kerncomponenten van Docker begrijpt, laten we de belangrijkste voor- en nadelen ervan bespreken. Dan kun je beslissen of het nuttig zal zijn voor het beheer van je softwareapplicaties.
Voordelen
Als ontwikkelaar kan een deel van je werk vervelend en repetitief worden als het handmatig wordt uitgevoerd. Met Docker containers kun je de automatisering van deze taken plannen. Het gebruik van cron jobs kan je werklast aanzienlijk verminderen en je tijd optimaliseren.
Bovendien is Docker zeer draagbaar. Het stelt elk lid van je ontwikkelteam in staat om aan applicaties te werken, zelfs met verschillende servers, machines of besturingssystemen. Deze opzet kan veel van de problemen elimineren die ontstaan door platform incompatibiliteiten.
In vergelijking met VM’s kunnen Docker containers meer ruimte besparen. Hoewel Docker en VM’s vergelijkbaar werken, is Docker veel lichter.
Bovendien heeft Docker een robuuste community. Door deel te nemen aan Docker communityevenementen kun je andere Docker gebruikers ontmoeten en met hen in contact komen, zowel persoonlijk als online:
Je zult ook kunnen snuffelen in de uitgebreide Docker communityforums. Als je een beginner bent, kunnen deze discussies je helpen advies in te winnen over het gebruik van dit platform.
Nadelen
Zoals we eerder vermeldden, kan Docker efficiënter zijn dan VM’s. Het draaien van applicaties op een fysieke server is echter meestal aanzienlijk sneller.
Docker kan ook een steile leercurve met zich meebrengen. Het is niet ontworpen om applicaties met een grafische gebruikersinterface (GUI) te draaien. Dit betekent dat je de commandoregel moet leren, wat voor beginners een uitdaging kan zijn.
Tenslotte draaien Docker containers op het OS van een host. De hostmachine kan in gevaar komen als er kwaadaardige software in deze containers verborgen zit.
Zo begin je met Docker
Om Docker te gaan gebruiken moet je de hoofdwebsite bezoeken. Download vervolgens de compatibele versie voor het OS van je computer.
Als je een Mac computer hebt, moet je de Docker versie kiezen voor een Intel chip of een Apple chip. Er zijn ook opties voor Windows en Linux gebruikers.
Zodra je het gedownloade bestand opent, installeert het Docker Desktop op je computer. Open vervolgens de Docker Hub en maak een nieuw account aan:
Nu kun je Docker Desktop openen en je aanmelden. Open dan je opdrachtregel of bash venster en voer dit commando uit:
docker run -d -p 80:80 docker/getting-started
Zodra je dit doet, zie je een nieuwe container in je Docker Desktop dashboard. De naam ervan wordt willekeurig gegenereerd voor je account:
Je krijgt ook een nieuwe Docker image. Als je naar het tabblad Images navigeert, zie je dat er een docker/getting-started image in gebruik is:
Nu heb je alles wat je nodig hebt om je lokale containers te gaan beheren!
Samenvatting
Als je meerdere applicaties moet beheren, kan Docker een effectieve tool zijn om ze onafhankelijk van elkaar te organiseren. Omdat het containers gebruikt, kan Docker je helpen elke app te ontwikkelen zonder het risico van conflicterende programmeertalen, bibliotheken of frameworks.
Hoewel Docker vaak efficiënter is dan een Virtuele Machine (VM), kan het werken op een fysieke server sneller zijn. Omdat het ook vertrouwt op een commandoregelinterface, is Docker misschien ook geen goede keuze voor absolute beginners.
Als WordPress ontwikkelaar zul je waarschijnlijk snel lokale testomgevingen moeten maken. Met behulp van DevKinsta kun je Docker-gebaseerde WordPress sites bouwen. Dan kun je zonder conflicten beginnen met het ontwikkelen van thema’s en plugins!