DDBM Blog

Het probleem "het werkt op mijn machine" oplossen met Docker

Geschreven door Darko Monzio Compagnoni | 12 Dec, 2024

Docker heeft een revolutie teweeggebracht in de manier waarop applicaties worden ontwikkeld, getest en ingezet. Het pakt een aantal veel voorkomende problemen bij softwareontwikkeling aan, waaronder inconsistente omgevingen, problemen bij het schalen van applicaties en problemen met afhankelijkheidsbeheer.

Door het gebruik van containers zorgt Docker ervoor dat applicaties in een gestandaardiseerde, geïsoleerde omgeving draaien, ongeacht waar ze worden ingezet.

Welk probleem lost het op?

Het primaire probleem dat Docker oplost is het "het werkt op mijn machine" probleem. Ontwikkelaars worden vaak geconfronteerd met problemen wanneer applicaties perfect werken in de ene omgeving, maar mislukken wanneer ze elders worden ingezet. Dit komt door verschillen in besturingssystemen, bibliotheken en configuratie-instellingen. Docker biedt een oplossing door applicaties te containeriseren, zodat ze consistent draaien op elke machine of server waarop Docker is geïnstalleerd.

Bovendien vereenvoudigt Docker het beheer van afhankelijkheden. Elke applicatie kan worden verpakt met zijn exacte afhankelijkheden, bibliotheken en configuratie, zodat alle benodigde componenten beschikbaar zijn wanneer de applicatie wordt ingezet en compatibiliteitsproblemen tussen verschillende omgevingen worden voorkomen.

Bovendien integreert Docker met Dagster.

Wat is een Docker-container?

Een Docker-container is een lichtgewicht, standalone en uitvoerbaar pakket dat alles bevat wat nodig is om een stuk software te draaien: de code, runtime, systeemtools, bibliotheken en instellingen. Containers zijn geïsoleerd van elkaar en van het hostsysteem, waardoor meerdere applicaties tegelijkertijd kunnen draaien zonder elkaar te storen.

Containers zijn overdraagbaar op verschillende systemen en omgevingen, waardoor het gemakkelijker is om applicaties te ontwikkelen, te testen en uit te rollen. In tegenstelling tot traditionele virtuele machines hebben containers geen apart besturingssysteem nodig om te draaien, waardoor ze efficiënter en sneller te starten zijn.

Snowflake lost deze problemen op met zijn Snowflake Container Services.

Wat is een Docker Image?

Een Docker image dient als een blauwdruk of sjabloon voor het maken van containers. Het is een alleen-lezen bestand dat instructies bevat voor het uitvoeren van een applicatie, inclusief alle afhankelijkheden, configuraties en code die nodig is om de applicatie uit te voeren. Je bouwt images meestal vanuit een Dockerfile, die de stappen definieert om afhankelijkheden te installeren en de applicatieomgeving op te zetten.

Hoewel images zelf geen draaiende applicaties zijn, bieden ze de basis voor het maken van containers. Zodra je een image hebt gemaakt, kun je het gebruiken om zoveel containers als nodig te instantiëren. De schoonheid van Docker-images ligt in hun onveranderlijkheid; zodra je een image aanmaakt, verandert het niet, waardoor consistentie tussen verschillende omgevingen verzekerd is.

Hoe blijven gegevens bewaard tussen containers?

Standaard zijn containers efemeer, wat betekent dat wanneer je ze verwijdert, alle gegevens die erin zijn opgeslagen ook verloren gaan. In veel scenario's moeten gegevens echter langer bewaard blijven dan de levensduur van een container.

Docker volume: een opslaggebied dat buiten het bestandssysteem van een container bestaat. Volumes zijn onafhankelijk van de levenscyclus van de container en zijn speciaal ontworpen voor het bewaren van gegevens. Wanneer een container wordt verwijderd, blijft het bijbehorende volume intact en kan het worden hergebruikt door andere containers. Volumes kunnen ook worden gedeeld tussen containers, waardoor gegevens kunnen worden gedeeld en gesynchroniseerd tussen verschillende delen van een applicatie.

Hoe een applicatie te containeriseren

Een applicatiein containers onderbrengen houdt in dat je een app en zijn omgeving omzet in een Docker image, die je vervolgens kunt gebruiken om Docker containers te maken. Dit proces begint meestal met het maken van een Dockerfile, die de noodzakelijke stappen specificeert om de omgeving in te stellen en afhankelijkheden voor de applicatie te installeren.

Je begint met het selecteren van een basisimage dat voldoet aan de vereisten van de applicatie (bijvoorbeeld een specifieke versie van Node.js of Python). Vervolgens kopieer je de applicatiecode en alle benodigde bestanden naar de image en installeer je de afhankelijkheden. Zodra je het Dockerfile hebt ingesteld, bouw je het image en gebruik je het om de applicatie in een container te draaien.

Het resultaat is een draagbare, geïsoleerde omgeving die de applicatie overal kan draaien waar Docker ondersteuning biedt, zodat de consistentie tussen ontwikkel-, test- en productieomgevingen wordt gewaarborgd.

Bronnen:

Bannerfoto door Todd Cravens op Unsplash