Wat is docker #
| Logo | Omschrijving |
|---|---|
![]() |
Docker is een open-source platform dat het mogelijk maakt om applicaties te automatiseren, verpakken, deployen en beheren als containers. Containers zijn lichtgewicht, draagbare en geïsoleerde omgevingen die alles bevatten wat een applicatie nodig heeft om te draaien, inclusief de code, runtime, systeemtools, bibliotheken en instellingen. |
concepten #
Laten we deze concepten eens wat nader bekijken:
- Open-source platform:
Dit betekent dat de broncode van Docker vrij beschikbaar is en dat iedereen deze kan bekijken, aanpassen en bijdragen aan de ontwikkeling ervan. Dit bevordert transparantie, samenwerking en innovatie binnen de Docker community. * - Automatiseren:
Docker automatiseert veel taken die betrokken zijn bij het beheren van applicaties, zoals het bouwen, testen en deployen. Dit bespaart tijd en vermindert de kans op fouten. - Verpakken:
Docker verpakt applicaties en hun afhankelijkheden in containers, waardoor ze gemakkelijk kunnen worden verplaatst en uitgevoerd op verschillende systemen. - Uitrollen (Deployen):
Docker maakt het eenvoudig om applicaties te deployen naar verschillende omgevingen, zoals ontwikkel-, test- en productieomgevingen. - Beheren:
Docker biedt tools voor het beheren van containers, zoals het starten, stoppen, monitoren en schalen van containers. - Lichtgewicht:
Docker containers zijn veel lichter dan virtuele machines (VM’s) omdat ze de kernel van het host-besturingssysteem delen. Dit betekent dat ze minder resources verbruiken en sneller opstarten. - Draagbaar:
Docker containers kunnen op elk systeem worden uitgevoerd dat Docker ondersteunt, ongeacht het onderliggende besturingssysteem. Dit maakt het gemakkelijk om applicaties te verplaatsen tussen verschillende omgevingen. - Geïsoleerd:
Docker containers zijn geïsoleerd van elkaar en van het host-besturingssysteem. Dit betekent dat applicaties in containers geen conflicten kunnen veroorzaken met andere applicaties of het host-systeem.
Analogie #
Stel je voor dat je een verhuisbedrijf bent. Je moet de inboedel van een huis verhuizen naar een nieuwe locatie. Je kunt alles los in de vrachtwagen gooien, maar dat is chaotisch en inefficiënt. Het is veel beter om alles in dozen te verpakken.
Docker is als een verhuisbedrijf dat applicaties “verpakt” in containers. Deze containers zijn als dozen die alles bevatten wat de applicatie nodig heeft om te functioneren. Dit maakt het gemakkelijk om de applicatie te “verhuizen” naar een andere server of omgeving, zonder dat je je zorgen hoeft te maken over ontbrekende onderdelen of compatibiliteitsproblemen.
Voorbeeld #
Een webapplicatie die is gebouwd met Node.js, MongoDB en Nginx kan worden verpakt in drie afzonderlijke Docker containers: één voor de Node.js applicatie, één voor de MongoDB database en één voor de Nginx webserver. Deze containers kunnen vervolgens worden uitgevoerd op een enkele server of worden gedistribueerd over meerdere servers.
Deze cursus behandelt de basisprincipes van Docker, inclusief de installatie, het bouwen van images met Dockerfiles, het orkestreren van multi-container applicaties met Docker Compose, het beheren van data persistentie met volumes en het configureren van netwerken tussen containers.
Uitbreiding #
De cursus is gestructureerd om je stapsgewijs door de belangrijkste aspecten van Docker te leiden:
- Installatie:
Je leert hoe je Docker kunt installeren op verschillende besturingssystemen, zoals Windows, macOS en Linux. - Docker images:
Je leert wat Docker images zijn, hoe je ze kunt vinden en downloaden van Docker Hub (een openbare registry voor Docker images), en hoe je ze kunt inspecteren om te zien wat erin zit. - Docker containers:
Je leert hoe je Docker containers kunt starten, stoppen, herstarten en verwijderen. Je leert ook hoe je met containers kunt interacteren via de command-line interface (CLI). - Dockerfile:
Je leert hoe je Dockerfiles kunt schrijven om je eigen custom Docker images te bouwen. Dockerfiles zijn tekstbestanden die de instructies bevatten voor het bouwen van een image. - Docker Compose:
Je leert hoe je Docker Compose kunt gebruiken om multi-container applicaties te definiëren en te beheren. Docker Compose is een tool die het gemakkelijk maakt om applicaties met meerdere containers te orkestreren. - Docker Volumes:
Je leert hoe je Docker Volumes kunt gebruiken om data persistentie in containers te bereiken. Docker Volumes zijn mechanismen die het mogelijk maken om data op te slaan buiten de lifecycle van een container, zodat de data niet verloren gaat wanneer de container wordt gestopt of verwijderd. - Docker Netwerken:
Je leert hoe je Docker Netwerken kunt configureren om communicatie tussen containers mogelijk te maken. Docker Netwerken zijn virtuele netwerken die containers met elkaar en met de buitenwereld kunnen verbinden.
Uitbreiding: #
Docker is meer dan alleen een technologie, het is een compleet platform dat tools en services biedt voor het bouwen, verzenden en uitvoeren van applicaties in containers. Het bestaat uit de volgende componenten:
- Docker Engine:
De core component van Docker die verantwoordelijk is voor het bouwen en uitvoeren van containers. Het is een client-server applicatie met een daemon proces, een REST API en een command-line interface (CLI). - Docker Hub:
Een cloud-based registry service waar je Docker images kunt opslaan en delen. Het biedt ook functionaliteiten zoals het automatisch bouwen van images, vulnerability scanning en integratie met GitHub en Bitbucket. - Docker Compose:
Een tool voor het definiëren en uitvoeren van multi-container Docker applicaties. Met Docker Compose kun je de services van je applicatie definiëren in een YAML-bestand en ze met een enkel commando starten, stoppen en updaten. - Docker Swarm:
Een native orchestratie tool voor Docker die het mogelijk maakt om een cluster van Docker Engines te beheren en containers over deze engines te distribueren. Docker is belangrijk omdat het de ontwikkeling, het testen en de deployment van applicaties vereenvoudigt. Het maakt het mogelijk om applicaties te verpakken met al hun afhankelijkheden in een enkele container, die vervolgens op elke machine kan worden uitgevoerd die Docker ondersteunt. Dit elimineert de problemen die vaak gepaard gaan met het configureren van applicaties in verschillende omgevingen.
De traditionele manier om applicaties te deployen is om ze direct op servers te installeren, waarbij je ervoor moet zorgen dat alle afhankelijkheden, zoals bibliotheken en systeemtools, correct zijn geïnstalleerd en geconfigureerd. Dit kan leiden tot conflicten tussen applicaties en problemen met compatibiliteit tussen verschillende omgevingen.
Docker lost dit probleem op door applicaties te isoleren in containers. Elke container heeft zijn eigen set afhankelijkheden en is geïsoleerd van andere containers en het host-besturingssysteem. Dit zorgt ervoor dat applicaties consistent draaien in verschillende omgevingen en dat er geen conflicten ontstaan tussen applicaties.
Voorbeeld: #
Stel je voor dat je een webapplicatie hebt die afhankelijk is van een specifieke versie van Python en een aantal Python bibliotheken. Zonder Docker zou je Python en de bibliotheken op elke server moeten installeren waar je de applicatie wilt deployen. Met Docker kun je een Docker image bouwen die Python, de bibliotheken en je applicatiecode bevat. Deze image kan vervolgens worden uitgevoerd op elke server met Docker, zonder dat je Python en de bibliotheken handmatig hoeft te installeren.
Key Takeaways: #
- Docker is een compleet platform dat tools en services biedt voor het bouwen, verzenden en uitvoeren van applicaties in containers.
- Docker is belangrijk omdat het de ontwikkeling, het testen en de deployment van applicaties vereenvoudigt.
- Docker elimineert de problemen die vaak gepaard gaan met het configureren van applicaties in verschillende omgevingen.
- Docker is een open-source platform dat containerisatietechnologie gebruikt om applicaties te verpakken en te draaien.
- Containers zijn lichtgewicht, draagbare en geïsoleerde omgevingen die alles bevatten wat een applicatie nodig heeft om te draaien.
- Docker vereenvoudigt de ontwikkeling, het testen en de deployment van applicaties.
- Deze cursus behandelt de basisprincipes van Docker, inclusief installatie, images, containers, Dockerfiles, Docker Compose, volumes en netwerken.
you need to learn Docker RIGHT NOW!! // Docker Containers 101 #
Leerdoelen & Waardepropositie #
Na het voltooien van deze cursus zul je in staat zijn om:
- Docker te installeren en te configureren op verschillende besturingssystemen.
- Docker images te vinden, downloaden en inspecteren.
- Docker containers te starten, beheren en ermee te interacteren.
- Dockerfiles te schrijven om custom Docker images te bouwen.
- Docker Compose te gebruiken om multi-container applicaties te definiëren en te beheren.
- Docker volumes te gebruiken voor data persistentie in containers.
- Docker netwerken te configureren voor communicatie tussen containers.
Waardepropositie #
Docker is een essentiële tool geworden voor softwareontwikkelaars, systeembeheerders en DevOps engineers. Het vereenvoudigt de ontwikkeling, het testen en de deployment van applicaties, waardoor de efficiëntie en productiviteit aanzienlijk worden verbeterd. Door Docker te leren, zul je in staat zijn om:
- Applicaties sneller en eenvoudiger te deployen.
- De consistentie van applicaties te garanderen in verschillende omgevingen.
- De schaalbaarheid en resource-efficiëntie van applicaties te verbeteren.
- De samenwerking en communicatie binnen development teams te bevorderen.
Expansion #
Laten we eens dieper ingaan op de waardepropositie van Docker:
- Sneller en eenvoudiger deployen:
Docker containers elimineren de “it works on my machine” problematiek, omdat de applicatie en al haar afhankelijkheden in één pakket zitten. Dit betekent dat de applicatie op elke machine met Docker op dezelfde manier zal draaien, ongeacht de configuratie van die machine. Dit versnelt het deployment proces aanzienlijk. - Consistentie in verschillende omgevingen:
Docker zorgt ervoor dat applicaties consistent draaien in verschillende omgevingen, zoals ontwikkel-, test- en productieomgevingen. Dit komt doordat de container alle afhankelijkheden van de applicatie bevat, inclusief de runtime, bibliotheken en systeemtools. Dit elimineert de problemen die kunnen ontstaan door verschillen in configuratie tussen omgevingen. - Verbeterde schaalbaarheid en resource-efficiëntie:
Docker containers zijn lichtgewicht en delen de kernel van het host-besturingssysteem. Dit betekent dat ze minder resources verbruiken dan VM’s. Bovendien kunnen Docker containers eenvoudig worden geschaald om aan de veranderende behoeften van applicaties te voldoen. - Bevorderde samenwerking en communicatie:
Docker maakt het gemakkelijk om applicaties te delen en te beheren binnen development teams. Docker images kunnen worden opgeslagen in een registry, zoals Docker Hub, en vervolgens door andere teamleden worden gedownload en gebruikt. Dit bevordert de samenwerking en communicatie binnen het team.
Voorbeeld: #
Een development team kan een Docker image bouwen voor hun webapplicatie en deze opslaan in Docker Hub. Het operations team kan vervolgens deze image downloaden en gebruiken om de applicatie te deployen naar de productieomgeving. Dit proces is veel efficiënter dan het handmatig installeren en configureren van de applicatie op elke server.
Key Takeaways: #
- Docker biedt talloze voordelen, zoals draagbaarheid, consistentie, efficiëntie, schaalbaarheid en isolatie.
- Docker is een essentiële tool geworden voor softwareontwikkelaars, systeembeheerders en DevOps engineers.
- Docker vereenvoudigt de ontwikkeling, het testen en de deployment van applicaties, waardoor de efficiëntie en productiviteit aanzienlijk worden verbeterd.
Virtualisatie vs. Containerisatie #
Virtualisatie en containerisatie zijn beide methoden om applicaties te isoleren van de onderliggende infrastructuur.
Virtualisatie #
creëert virtuele machines (VM’s) die elk hun eigen besturingssysteem en kernel hebben. Dit resulteert in een hoge mate van isolatie, maar het is ook resource-intensief.
Uitbreiding: #
Bij virtualisatie wordt een hypervisor gebruikt om een laag tussen de hardware en de VM’s te creëren. De hypervisor is verantwoordelijk voor het toewijzen van resources aan de VM’s en het isoleren van de VM’s van elkaar. Elke VM heeft zijn eigen besturingssysteem, kernel, bibliotheken en applicaties. Dit resulteert in een hoge mate van isolatie, maar het betekent ook dat elke VM veel resources verbruikt, zoals CPU, geheugen en schijfruimte.
Containerisatie #
daarentegen deelt de kernel van het host-besturingssysteem met alle containers. Dit maakt containers veel lichter en sneller dan VM’s.
Uitbreiding: #
Bij containerisatie wordt een container engine, zoals Docker Engine, gebruikt om containers te beheren. Containers delen de kernel van het host-besturingssysteem, maar hebben hun eigen filesystem, processen en netwerk stack. Dit maakt containers veel lichter en sneller dan VM’s, omdat ze geen eigen besturingssysteem hoeven te draaien.
Diagram: #

Het diagram laten zien hoe VM’s een hypervisor gebruiken en hun eigen besturingssysteem hebben, terwijl containers een container engine gebruiken en de kernel van het host-besturingssysteem delen.
Key Takeaways: #
Virtualisatie en containerisatie zijn beide methoden om applicaties te isoleren van de onderliggende infrastructuur.
Virtualisatie creëert VM’s met hun eigen besturingssysteem en kernel, wat resource-intensief is.
Containerisatie deelt de kernel van het host-besturingssysteem met alle containers, wat containers veel lichter en sneller maakt dan VM’s.
De voordelen van Docker #
Docker biedt talloze voordelen,
waaronder:
- Draagbaarheid:
Docker containers kunnen op elk systeem worden uitgevoerd dat Docker ondersteunt, ongeacht het onderliggende besturingssysteem.
Docker containers zijn platformonafhankelijk. Dit betekent dat je een Docker image kunt bouwen op je laptop (bijvoorbeeld met Linux) en deze vervolgens kunt uitvoeren op een server met een ander besturingssysteem (bijvoorbeeld Windows Server). Dit is mogelijk omdat de container alle afhankelijkheden bevat die nodig zijn om de applicatie uit te voeren, inclusief de runtime, bibliotheken en systeemtools. - Consistentie:
Docker containers zorgen ervoor dat applicaties consistent draaien in verschillende omgevingen. Dit komt doordat de container alle afhankelijkheden van de applicatie bevat, inclusief de runtime, bibliotheken en systeemtools. Dit elimineert de “it works on my machine” problematiek, die vaak ontstaat doordat er verschillen zijn in de configuratie van ontwikkel-, test- en productieomgevingen. - Efficiëntie:
Docker containers zijn lichtgewicht en delen de kernel van het host-besturingssysteem. Dit betekent dat ze minder resources verbruiken dan VM’s, die elk hun eigen besturingssysteem en kernel hebben. Dit maakt Docker containers ideaal voor omgevingen met beperkte resources, zoals cloud omgevingen. - Schaalbaarheid:
Docker containers kunnen eenvoudig worden geschaald om aan de veranderende behoeften van applicaties te voldoen. Je kunt bijvoorbeeld meerdere instances van een Docker container starten om de load te verdelen over meerdere servers. Dit is veel eenvoudiger dan het schalen van VM’s, wat vaak handmatige configuratie vereist. - Isolatie:
Docker containers isoleren applicaties van elkaar en van het host-besturingssysteem. Dit betekent dat applicaties in containers geen conflicten kunnen veroorzaken met andere applicaties of het host-systeem. Dit verbetert de beveiliging en stabiliteit van applicaties.
Voorbeeld: #
Een bedrijf kan Docker gebruiken om een microservices architectuur te implementeren. Elke microservice kan worden verpakt in een aparte Docker container. Deze containers kunnen vervolgens worden gedistribueerd over meerdere servers en onafhankelijk van elkaar worden geschaald.
Key Takeaways: #
Docker biedt talloze voordelen, zoals draagbaarheid, consistentie, efficiëntie, schaalbaarheid en isolatie.
Deze voordelen maken Docker een aantrekkelijke oplossing voor het ontwikkelen, testen en deployen van applicaties.
Docker terminologie #
Docker image:
Een read-only template die de instructies bevat voor het maken van een Docker container.
- Docker container:
Een draaiende instantie van een Docker image. - Docker Hub:
Een openbare registry voor het opslaan en delen van Docker images. - Docker Engine:
De core component van Docker die containers bouwt en uitvoert. - Docker CLI:
De command-line interface voor interactie met Docker. **Expansion:** Laten we deze termen eens nader bekijken: - Docker image:
Een Docker image is een read-only template die de instructies bevat voor het maken van een Docker container. Het image bevat alles wat nodig is om een applicatie uit te voeren, inclusief de applicatiecode, runtime, bibliotheken, systeemtools en configuratiebestanden. Docker images zijn opgebouwd uit lagen, waarbij elke laag een verandering in het filesystem van het image vertegenwoordigt. - Docker container:
Een Docker container is een draaiende instantie van een Docker image. Wanneer je een Docker image uitvoert, creëert Docker een container die een geïsoleerde omgeving biedt voor de applicatie. De container heeft zijn eigen filesystem, processen en netwerk stack. - Docker Hub:
Docker Hub is een cloud-based registry service waar je Docker images kunt opslaan en delen. Het is de grootste openbare registry voor Docker images en bevat een grote verzameling van officiële en community-gegenereerde images. - Docker Engine:
Docker Engine is de core component van Docker die verantwoordelijk is voor het bouwen en uitvoeren van containers. Het is een client-server applicatie met een daemon proces, een REST API en een command-line interface (CLI). - Docker CLI:
De Docker CLI is de command-line interface waarmee je kunt interacteren met Docker Engine. Met de CLI kun je images downloaden, containers starten, stoppen en beheren, en andere Docker-gerelateerde taken uitvoeren.
Voorbeeld: #
Je kunt een Docker image downloaden van Docker Hub voor een webserver, zoals Nginx. Dit image bevat de Nginx webserver software en alle afhankelijkheden die nodig zijn om Nginx uit te voeren. Wanneer je dit image uitvoert, creëert Docker een container die een geïsoleerde omgeving biedt voor de Nginx webserver. Je kunt vervolgens de Nginx webserver configureren en je website bestanden toevoegen aan de container.
Key Takeaways: #
Docker images zijn read-only templates die de instructies bevatten voor het maken van Docker containers.
Docker containers zijn draaiende instances van Docker images. * Docker Hub is een openbare registry voor het opslaan en delen van Docker images.
Docker Engine is de core component van Docker die containers bouwt en uitvoert. * Docker CLI is de command-line interface voor interactie met Docker.
Voorbeeld: #
Een Docker image voor een webserver kan bijvoorbeeld de webserver software (bijv. Apache of Nginx), de applicatiecode en alle benodigde bibliotheken bevatten. Wanneer dit image wordt uitgevoerd als een container, draait de webserver in een geïsoleerde omgeving, onafhankelijk van andere applicaties op het systeem.
Uitbreiding: #
Laten we dit voorbeeld eens uitbreiden met een concreet scenario. Stel je voor dat je een website wilt ontwikkelen met behulp van de volgende technologieën:
- PHP:** De programmeertaal die gebruikt wordt voor de backend van de website.
- * **MySQL:** De database die gebruikt wordt om data op te slaan.
- * **Nginx:** De webserver die gebruikt wordt om de website te hosten.
Zonder Docker zou je PHP, MySQL en Nginx op je ontwikkelmachine moeten installeren en configureren. Dit kan een tijdrovend en foutgevoelig proces zijn.
Met Docker kun je een Docker image bouwen voor elk van deze componenten. Je kunt bijvoorbeeld een Docker image bouwen voor PHP die de PHP interpreter, de benodigde extensies en je applicatiecode bevat.
Je kunt ook een Docker image bouwen voor MySQL die de MySQL server en je database schema bevat. En je kunt een Docker image bouwen voor Nginx die de Nginx webserver en je website configuratie bevat.
Vervolgens kun je deze images uitvoeren als containers. De PHP container zal je applicatiecode uitvoeren, de MySQL container zal je database hosten en de Nginx container zal de website hosten. De containers kunnen met elkaar communiceren via een Docker netwerk.
Dit heeft de volgende voordelen:
- Eenvoudige installatie en configuratie:
Je hoeft PHP, MySQL en Nginx niet handmatig te installeren en configureren op je ontwikkelmachine. - Consistentie:
De applicatie zal op dezelfde manier draaien op je ontwikkelmachine als op de productieserver, omdat de containers alle afhankelijkheden bevatten. - Isolatie:
De componenten van de applicatie zijn geïsoleerd van elkaar en van het host-besturingssysteem, wat de beveiliging en stabiliteit verbetert.
Key Takeaways: #
Docker images bevatten alles wat een applicatie nodig heeft om te draaien, inclusief de code, runtime, systeemtools, bibliotheken en instellingen.
Docker containers zijn draaiende instances van Docker images.
Docker containers draaien in een geïsoleerde omgeving, onafhankelijk van andere applicaties op het systeem.
