Docker
Docker slaat programma's en hun afhankelijkheden op in 'images'. Deze vormen de basis voor gevirtualiseerde containers die op vrijwel elk besturingssysteem kunnen draaien. Dit maakt applicaties draagbaar en ongecompliceerd, zowel tijdens de ontwikkeling als bij het opschalen clusters.
Op enkele interfaces met het besturingssysteem of hardware na, is de applicatie volledig geïsoleerd. Een willekeurig aantal containers kan van een 'image' worden gemaakt en parallel worden gebruikt, bijvoorbeeld om schaalbare cloudservices te bieden. Containervirtualisatie is er in vele varianten; Docker probeert het werken met containers zo praktisch en eenvoudig mogelijk te maken.
Docker vs Virtuele machines
Virtuele machines bevatten een grote hoeveelheid informatie, van de gesimuleerde hardware tot het besturingssysteem en de geïnstalleerde programma's. Het resultaat: ze verbruiken veel opslagruimte en bronnen.
Virtuele machines hebben nog steeds hun bestaansreden; Bijvoorbeeld als er meerdere machines met verschillende besturingssystemen of hardwarespecificaties op een host gesimuleerd moeten worden. Omdat een Docker-container geen eigen besturingssysteem en geen gesimuleerde hardware bevat. Dit is waar het systeem van de host wordt benaderd, zodat alle containers OS en hardware delen.
Docker Engine
Het hart van containervirtualisatie met Docker is de Docker Engine. De software vormt de interface tussen de bronnen van de host en de actieve containers. Elk systeem waarop de Docker Engine is geïnstalleerd, kan Docker-containers gebruiken. Docker is oorspronkelijk ontworpen voor gebruik op Linux-systemen. Met virtualisatie via Virtualbox of Hyper-V werkt de engine ook op apparaten met Windows of Mac OS. Docker is daardoor in vrijwel alle gangbare scenario's inzetbaar.
Schaalbaarheid
De containers en images die Docker maakt, zijn erg compact in vergelijking met virtuele machines. In een cloudomgeving levert dit grote besparingen op: er kunnen aanzienlijk meer instances van dezelfde hardware worden voorzien. Daarnaast starten de containers sneller op dan een virtuele machine, waardoor ze flexibeler kunnen worden ingezet voor schaalvergroting.
Docker kan worden geïntegreerd in veel gangbare DevOps-systemen zoals Ansible of Puppet, wat de levering van software via Docker-containers verder vereenvoudigt. Bijzonder aan Docker is dat de containers via script kunnen worden aangestuurd. Een Docker-bestand heeft meestal maar een paar regels en bevat alle informatie die nodig is om een Docker-image te starten. Docker is daarom bij uitstek geschikt voor geautomatiseerd schalen. De 'images' kunnen ook gemakkelijk worden beheerd via de repository.
Docker tijdens ontwikkeling
Van elkaar geïsoleerde containers zijn vaak nuttig bij de ontwikkeling: ze kunnen onafhankelijk van elkaar worden ontwikkeld en vergemakkelijken zo bijvoorbeeld het samenwerken aan grote projecten. Containers maken het gemakkelijk om applicaties in te pakken en te verzenden, omdat ze in vrijwel elke Docker Engine-omgeving direct werken. Dit is vooral interessant voor 'continues integration' en 'continues deployment', aangezien elke ontwikkelaar onafhankelijk zijn of haar geïsoleerde deel van het project kan leveren.
En aangezien de containers al alle afhankelijkheden hebben voor de programma's die ze bevatten, kunnen ze snel en gemakkelijk op een breed scala aan machines worden gebruikt. Als ontwikkelaar kun je bijvoorbeeld je deelproject isoleren in een container en deze met Docker Engine overzetten naar de testserver. Daar kunt u de gewenste tests uitvoeren zonder een langdurige installatie of wachten op de volgende build.
Kies voor kwaliteit, zowel in code als communicatie.