De wereld van softwareontwikkeling groeit en breidt zich zo snel uit dat er elke dag nieuwe platforms en tools populair worden. Docker is daar één van, en baant de weg voor een nieuwe generatie ontwikkelaars. In dit artikel zullen we onderzoeken wat Docker en Docker Container en hun voordelen, hoe ze te gebruiken, en andere details is. Dus, zonder verder oponthoud, laten we diep graven in ons Docker Container overzicht.
Als het te complex klinkt voor u en uw kennisniveau, lees dan tot het einde, want onderaan het artikel bieden we ook een eenvoudiger no-code alternatief dat meer geschikt zou kunnen zijn voor beginners, burgerontwikkelaars, en iedereen die het gemakkelijkst en snelst een toepassing moet ontwikkelen.
Wat is een Docker Container?
Voordat we bespreken wat Docker Container is, moeten we een stap terug doen en het hebben over wat Docker is. Docker is een open-source platform voor ontwikkelaars. Met Docker kan de applicatie, met al zijn afhankelijkheden, verpakt worden in de vorm van containers. Met dit systeem kan elke applicatie in een geïsoleerde omgeving werken: elke container is onafhankelijk en bevat de applicatie met zijn afhankelijkheden en bibliotheken. Applicaties zullen elkaar zo niet storen, en de ontwikkelaar kan aan elk ervan onafhankelijk werken. Docker Containers zijn ook belangrijk en nuttig als het gaat om teamwerk.
Een ontwikkelaar kan bijvoorbeeld een container ontwikkelen en deze doorgeven aan het team. Het team zou de container kunnen draaien, waarbij de hele omgeving die door de eerste programmeur is ontwikkeld, wordt gerepliceerd.
Docker-architectuur
Docker gebruikt een client-server architectuur die werkt met de volgende "stenen":
- De Docker Daemon: deze luistert naar de verzoeken van de Docker Client en beheert de objecten zoals containers en images, en volumes en netwerken.
- De Docker Client: het is hoe de gebruiker interageert met het Docker platform.
- Docker hub: het is een register (registers slaan images op, zie hieronder) dat publiek is, wat betekent dat elke Docker-gebruiker er toegang toe heeft en er naar images kan zoeken. Docker zoekt standaard naar images in de Docker Hub, maar je kan ook een private registry opzetten en gebruiken.
- Docker images: dit zijn sjablonen voor het maken van containers. Container images kunnen gebaseerd zijn op andere container images met enige aanpassing. Naast het gebruik van images die door andere gebruikers zijn gemaakt en beschikbaar zijn op de openbare registers, kunt u uw eigen images maken en ze opslaan in uw privé-register of ze delen in een openbare.
- Docker containers: zij zijn de uitvoerbare instanties van de container images. Elke draaiende container is goed geïsoleerd van alle andere, maar u kunt ze ook samenvoegen om uw toepassing te maken. Containers kun je zien als geïsoleerde draaiende software of als bouwstenen van dezelfde applicatie.
Nu je weet wat alles is en doet, kun je de Docker Architectuur beter begrijpen: we hebben de Docker Client die "praat" met de Docker Daemon, die zich bezighoudt met het bouwen en draaien van de Docker Containers. De Docker Client, in het bijzonder, communiceert met de Docker Daemon via een REST API over een netwerkinterface of UNIX sockets. Eén Docker Client kan met meer dan één Docker Daemon communiceren.
Waarom hebben we een Docker container nodig?
Het principe dat aan de basis ligt van Docker Containers en hun inzet is containerisatie. Om het belang en de voordelen ervan te begrijpen, kan het nuttig zijn een ontwikkelingsscenario zonder containerisatie te beschrijven.
Vóór containerisatie
Ontwikkelaars hebben altijd willen werken aan toepassingen in geïsoleerde omgevingen, zodat ze elkaar niet storen. Vóór containerisatie was de enige manier om applicaties en hun afhankelijkheden te isoleren het plaatsen van elk van hen op een aparte virtuele machine.
Op die manier draaien de toepassingen op dezelfde hardware; de scheiding is virtueel. Virtualisatie heeft echter vele beperkingen (vooral zoals we gaan ontdekken als we het vergelijken met containerisatie). Ten eerste zijn virtuele machines omvangrijk. Ten tweede maakt het draaien van meerdere virtuele machines de prestaties van elk van hen onstabiel.
Er zijn ook andere problemen in verband met het gebruik van virtuele machines als het gaat om updates, portabiliteit en integraties, en het opstartproces kan soms erg tijdrovend zijn. Deze problemen hebben de gemeenschap van ontwikkelaars ertoe aangezet een nieuwe oplossing te bedenken. En die nieuwe oplossing is containerisatie.
Containerisatie
Containerisatie is ook een soort Virtualisatie, maar het brengt de Virtualisatie naar het niveau van het besturingssysteem. Dit betekent dat terwijl virtualisatie, met behulp van virtuele machines, virtuele hardware creëert, containerisatie een virtueel besturingssysteem creëert.
In tegenstelling tot virtuele machines, zijn containers efficiënter omdat:
- Ze maken gebruik van een host besturingssysteem en dus is er geen gast besturingssysteem;
- Ze delen relevante bibliotheken en bronnen wanneer nodig, waardoor de uitvoering zeer snel is.
- Omdat alle containers hetzelfde host-besturingssysteem delen, is ook het opstartproces extreem snel (het kan enkele seconden duren!).
Met andere woorden, met containerisatie hebben we een ontwikkelomgevingstructuur die er als volgt uitziet:
- een gedeeld host-besturingssysteem aan de basis
- een container engine
- containers die alleen de specifieke bibliotheken en afhankelijkheden van hun toepassing bevatten en die volledig van elkaar geïsoleerd zijn.
Bij virtuele machines zou de structuur als volgt zijn:
- een host besturingssysteem kernel;
- een (gescheiden) gast-besturingssysteem voor elk van de toepassingen;
- de verschillende toepassingen met hun bibliotheken en afhankelijkheden.
Zoals gezegd is het grote verschil tussen de twee systemen de afwezigheid van een gast-besturingssysteem bij het Containerization-model, wat het verschil maakt.
De voordelen van Docker
Docker Container is een platform waarmee je containerisatie kunt exploiteren zoals we dat beschreven hebben. Als we alle voordelen die het heeft voor ontwikkelaars zouden moeten samenvoegen, dan zouden dat de volgende zijn.
Geïsoleerde omgeving & meerdere containers
Met Docker kun je niet alleen containers maken en opzetten die van elkaar geïsoleerd zijn en kunnen werken zonder elkaar te storen, maar je kunt er ook meerdere containers tegelijk en op dezelfde host opzetten. Elk van de meerdere containers heeft alleen toegang tot de toegewezen resources. Bovendien is het elimineren van een applicatie die u niet meer nodig hebt ook eenvoudiger: u hoeft alleen de bijbehorende container te elimineren.
Implementatiesnelheid
Omdat Docker zo gestructureerd is (zie de vorige paragraaf), maakt het de implementatie van applicaties een stuk sneller (in vergelijking met het alternatief, het gebruik van virtuele machines). De reden waarom Docker Containers zo goed kunnen presteren, is dat Docker voor elk proces een andere container aanmaakt, zodat de Docker Containers niet opstarten in een besturingssysteem.
Flexibiliteit en schaalbaarheid
Docker Container maakt het proces van veranderingen aan uw applicaties een stuk eenvoudiger. Want als u moet ingrijpen in een applicatie, kunt u gewoon de container ervan openen, zonder dat dit gevolgen heeft voor alle andere applicaties. De Docker Compose commandotool (zie de volgende paragraaf) verbetert de flexibiliteit en schaalbaarheid op onmogelijke manieren met elke andere benadering van applicatieontwikkeling.
Overdraagbaarheid
De toepassingen die in de softwarecontainers worden gemaakt, zijn uiterst goed overdraagbaar. De Docker Containers kunnen op elk platform draaien zolang het host-besturingssysteem Docker ondersteunt. Wanneer u uw toepassing binnen de container hebt gemaakt, kunt u deze verplaatsen naar elk platform dat Docker ondersteunt, en zij zal op alle platforms op dezelfde wijze presteren.
Beveiliging
Docker Containers verbeteren de beveiliging omdat:
- De ene applicatie (en zijn mogelijke problemen) heeft geen invloed op een andere.
- De ontwikkelaar heeft volledige controle over het verloop van het verkeer.
- Elke draaiende container krijgt een aparte set resources toegewezen.
- Een applicatie geen toegang heeft tot de gegevens van een andere applicatie zonder autorisatie.
Wat is Docker Compose?
Docker Compose is een Docker commando dat de "kracht" van Docker en Containerization naar een ander niveau brengt. Met deze tool kan het ontwikkelingsproces van uw toepassingen veel sneller en gemakkelijker verlopen. De Docker Compose tool is een commandoregel tool en wat het doet is meerdere containers nemen en ze samenvoegen tot een applicatie. De applicatie kan dan worden uitgevoerd op een enkele host.
Met Docker Compose heb je de mogelijkheid om je complexe applicatieontwikkelingsproject op te delen in kleinere projecten. U kunt afzonderlijk aan de verschillende aspecten werken, en u kunt ze uiteindelijk samenvoegen tot uw uiteindelijke web-app of andere applicatie.
Docker Compose gebruiken betekent ook dat je de container die je voor dit project hebt gemaakt, kunt gebruiken in andere verschillende projecten. Het betekent ook dat wanneer u een enkel aspect moet bijwerken, u daaraan kunt werken zonder het hele applicatieontwikkelingsproject te beïnvloeden.
Stappen om Docker Container te gebruiken
Door dit artikel te lezen, heb je al je eerste stappen gezet in de wereld van applicatieontwikkeling met Docker. Je kunt zo'n krachtige maar complexe tool niet gebruiken als je geen kennis hebt van alle aspecten ervan. Zodra u Docker op uw computer hebt geïnstalleerd (het is beschikbaar voor Mac, Windows en Linux), zijn uw volgende stappen de volgende.
- Hoe containers bouwen en uitvoeren
- Hoe toepassingen uit te rollen
- Hoe een applicatie draaien met Docker Compose
Een van de vele voordelen van het gebruik van Docker is dat er gedetailleerde documentatie online beschikbaar is, en deze is bewerkt en gepubliceerd door het Docker-team zelf (dus zeer betrouwbaar). U kunt zich volledig baseren op hun documentatie bij het begin en tijdens de ontwikkeling van uw applicatie. Hier willen we echter aanraden te beginnen met deze twee stappen:
Start de tutorial
Docker heeft een ingebouwde tutorial voor nieuwe gebruikers. Om deze te starten opent u een opdrachtprompt en typt u dit commando (u kunt het kopiëren en plakken):
Docker run -d -p 80:80 docker/getting-started
Er zijn een paar dingen die je kunt leren door alleen maar naar dit commando te kijken:
- de "-" draait de container op de achtergrond;
- -p 80:80 koppelt poort 80 op de host aan poort 80 op de container;
- docker/getting-started specificeert de te gebruiken image.
Het dashboard begrijpen
Net nadat je de tutorial hebt doorlopen en voordat je in de documentatie van het Docker-team duikt, is het belangrijk dat je het Docker Dashboard begrijpt. Het is een paneel dat snelle toegang biedt tot containerlogs en hun levenscycli. Het is bijvoorbeeld uiterst eenvoudig om containers te verplaatsen of te verwijderen vanuit het dashboard.
Docker Container: vereist het kennis van applicatieontwikkeling?
Het gebruik van Docker, zijn container en de Docker Compose-tool vereist enige kennis van programmeertalen, frameworks en architectuur. Docker kan het proces vergemakkelijken, maar alleen voor degenen die al vertrouwd zijn met programmeren en het inzetten van applicaties. Voor beginners, ontwikkelaars, of iedereen die de eenvoudigste manier zoekt om applicaties te deployen, is er echter een geldig alternatief: no-code software ontwikkeling en AppMaster.
AppMaster is in feite een wereldwijd toonaangevend no-code platform waarmee u een webapp, mobiele app en backend kunt maken zonder de code handmatig te schrijven. AppMaster biedt bouwstenen voor uw project, evenals een visuele interface waarin u ze kunt assembleren met een drag-and-drop systeem. Terwijl u uw software op deze manier creëert, zou AppMaster automatisch de broncode voor u aanmaken. De broncode is op elk moment toegankelijk, en is ook exporteerbaar.
AppMaster's softwarebouwstenen kunnen in zekere zin lijken op Docker-images, maar ze bieden u het kostbare voordeel dat ze kunnen worden samengesteld zonder enige broncode te schrijven. AppMaster kan een geschikter platform voor u zijn als u een beginner bent.
Interessant feit AppMaster gebruikt ook een docker container. Standaard worden alle client applicaties automatisch gehost door AppMaster in geïsoleerde Docker Containers. Typisch, wanneer een client op de publiceer knop klikt, in minder dan 30 seconden, genereert AppMaster broncode, compileert, test en verpakt het in een Docker Container. Het platform stuurt deze Docker Container naar de lokale AppMaster's docker, een hub die in het platform. AppMaster, gebruikt door Harbor, is een open-source oplossing. En daarna stuurt AppMaster een commando naar de doelserver zodat die deze container oppikt en lanceert.
Conclusie
Docker is een belangrijk hulpmiddel in de handen van ontwikkelaars. Zoals we hebben gezien, lost het veel van de beperkingen op die de oudere virtuele machine aanpak had. Het is echter nog steeds een methode die geschikt is voor deskundige ontwikkelaars: hoewel je templates en images kunt gebruiken, moet je immers nog steeds code schrijven om veel dingen te doen binnen het Docker-platform. Als u op zoek bent naar een eenvoudiger alternatief, als u het schrijven van code helemaal wilt vermijden, dan zijn AppMaster en de no-code benadering de perfecte oplossingen voor u.