Handleiding voor Linux-containers: een inleiding tot containers

click fraud protection

Containers zijn al jaren een modewoord... maar wat zijn dat precies?

Containers zijn een methode om gevirtualiseerde applicaties op uw computer uit te voeren, vergelijkbaar met virtuele machines, maar met behulp van een andere reeks onderliggende technologieën. Ze kunnen complex zijn om te begrijpen, maar ze zijn essentieel om alles uit te voeren Minecraft servers naar Google. En we laten u zien hoe u ze kunt instellen.

We zullen Linux gebruiken, een besturingssysteem dat is gebouwd met de nadruk op draagbaarheid, modulariteit en stabiliteit. Linux zit in alles, van servers tot magnetrons tot videogameconsoles. Containers zijn niet beperkt tot het draaien op Linux, maar de technologieën erachter zijn het meest geschikt en werken het beste op Linux. Als je nieuw bent bij Linux, raden we je aan om onze beginners gids voordat je erin duikt.

Zijn containers virtuele machines?

Containers kunnen een complex onderwerp zijn, maar het is het beste om met één belangrijk punt te beginnen: een container is dat ook

niet een virtuele machine. Een virtuele machine is een gesimuleerde versie van specifieke hardware en de bijbehorende software die draait in een zogenaamde hypervisor. Als je ooit software zoals VirtualBox of meervoudig, dan heb je een hypervisor gebruikt.

De hypervisor draait meestal als zijn eigen besturingssysteem (bekend als een type 1 hypervisor) of binnen de grenzen van een ander besturingssysteem zoals Windows of Ubuntu (een type 2 hypervisor). De verantwoordelijkheid van de hypervisor is om het gastbesturingssysteem te voorzien van de gesimuleerde hardware die het nodig heeft om te kunnen draaien. Het volledige besturingssysteem kan er dan bovenop draaien. Dit omvat alles, van een gesimuleerde CPU en RAM tot databussen, schijfstations of netwerkadapters. Deze simulatie is rekenkundig duur, dus virtuele machines hebben doorgaans een aanzienlijke overhead.

Dus, wat is een container?

Een container lijkt op een virtuele machine omdat deze software bevat en uitvoert in een geïsoleerde omgeving op een hostsysteem. Containers vervangen echter de traditionele hardwarevirtualisatie door rechtstreeks op het hostbesturingssysteem te vertrouwen. Containers delen de bibliotheken en binaire bestanden van het hostbesturingssysteem en hebben alleen de bronnen en afhankelijkheden die nodig zijn om de specifieke applicatie die ze bevatten uit te voeren. Dit betekent dat er geen volledig besturingssysteem per container nodig is, omdat alle containers op een systeem kan het besturingssysteem met één host delen met behoud van de scheiding die u bij virtueel krijgt machines.

Containers hebben toegang tot het hostbesturingssysteem via een containerengine, die actieve containers beheert en hun toegang tot het onderliggende besturingssysteem controleert. Dit kan het afdwingen van de beveiliging tussen containers omvatten en het verlenen of weigeren van toegang tot besturingssysteembestanden of netwerkverbindingen.

Wat zijn enkele afwegingen bij het gebruik van containers?

Hoewel virtuele machines en containers vergelijkbaar zijn, heeft het gebruik van containers ook nadelen. Ten eerste worden virtuele machines als veiliger beschouwd, omdat het aanvalsoppervlak om aan de virtuele machine te ‘ontsnappen’ aanzienlijk kleiner en moeilijker te doordringen is. Een container is mogelijk niet geschikt voor het testen van bijvoorbeeld malware.

Het grote voordeel van het gebruik van containers is dat ze licht van gewicht zijn. Het vermijden van de noodzaak om een ​​volledig besturingssysteem te virtualiseren betekent minimale opstarttijden en verminderde systeemoverhead. Dit betekent dat er veel meer containers op één host kunnen draaien, wat met virtuele machines niet mogelijk zou zijn.

Omdat containers geen volledig besturingssysteem vereisen, kunnen ze eenvoudig in kleinere afbeeldingen worden verpakt en gedistribueerd. Hoewel een volledige afbeelding van een virtuele machine gemakkelijk tientallen gigabytes kan groot zijn, kunnen containers worden geleverd in afbeeldingen zo klein als 15 KB. Dit maakt het uiterst eenvoudig om containers te distribueren en te gebruiken. We zullen dit demonstreren door enkele eenvoudige voorbeeldcontainers in Docker uit te voeren.

Docker installeren

Dat is veel theorie, dus laten we aan de slag gaan. Om u te laten zien hoe u een container instelt, installeren we Docker in Ubuntu 23.10 en gebruiken we deze om een ​​eenvoudige Hello World-container uit te voeren. Onze stappen zijn getest op een virtuele machine, maar u kunt ook dual-booten vanaf uw Windows-pc of een prima laptop voor linux.

Docker is snel uitgegroeid tot de de facto containerisatietool. Hoewel er andere tools bestaan, wordt Docker algemeen gebruikt en is het perfect voor alle toepassingen, behalve de meest veeleisende. Er is documentatie over de verschillende manieren om Docker te installeren, maar we gebruiken het gemaksinstallatiescript. Met deze opdracht wordt een script van get.docker.com naar uw lokale computer gedownload:

$ curl -fsSL https://get.docker.com -o get-docker.sh

U kunt vervolgens dit script uitvoeren om Docker te installeren. U kunt controleren of Docker correct is geïnstalleerd door de versie te controleren met:

$ sudo sh ./get-docker.sh

Gevolgd door een versiecontrole met:

$ sudo docker version

U kunt ook controleren of de docker-service op de achtergrond draait met:

$ sudo systemctl status docker

Het zou ‘actief (actief)’ moeten aangeven in groene tekst, zoals gemarkeerd in de onderstaande schermafbeelding. De versie van de Docker-engine moet ook zonder fouten worden afgedrukt.

Een eenvoudig voorbeeld uitvoeren

Nu Docker is geïnstalleerd, kunt u het gebruiken om een ​​containerimage te downloaden. Containerimages lijken veel op ISO's voor virtuele machines, behalve dat ze meestal kleiner en gemakkelijker te bouwen zijn. Download een eenvoudige hello-world containerimage met de volgende opdracht:

$ sudo docker pull hello-world

Zodra die afbeelding is gedownload, kunt u dit verifiëren door de gedownloade afbeeldingen op uw systeem op te sommen met behulp van het volgende:

$ sudo docker images

Je zou nu Hello-World gedownload moeten zien. Let op het zeer kleine formaat (13Kb op onze testmachine), evenals de tag. De tag van een afbeelding is in feite de versie ervan. Standaard downloadt Docker de nieuwste versie van een afbeelding. Voer een container uit op basis van deze afbeelding met behulp van:

$ sudo docker run hello-world: latest

Dit levert het hello-world-verhaal van Dockers op, dat draait vanuit een heel klein C-programma (dat je kunt bekijken op GitHub).

Gefeliciteerd; je hebt je eerste container gerund! In dit geval heeft het programma het resultaat uitgevoerd en de uitvoering ervan voltooid. De container is nu dood en draait niet meer.

Hoe containers levend te houden

Nadat we een basiscontainer hebben uitgevoerd, kunnen we nu een complexer voorbeeld bouwen dat niet onmiddellijk wordt afgesloten zodra een taak is voltooid. Containers zijn vaak gebouwd rond één enkel proces, waardoor er mogelijk meer processen ontstaan. Zodra dit basisproces wordt afgesloten, wordt de hele container ermee afgesloten. Dit klinkt misschien als een beperking, maar het lijkt eigenlijk erg op de manier waarop systemen in de volledige Linux-kernel functioneren.

Om een ​​hardnekkig voorbeeld te geven: we kunnen een afbeelding ophalen voor Nginx, een webserver die wordt gebruikt om een ​​aanzienlijk percentage van de websites ter wereld te hosten. We hebben voor dit voorbeeld voor Nginx gekozen omdat het eenvoudig is, geen geavanceerde configuratie vereist en licht van gewicht is. Download de nieuwste Nginx-afbeelding met de volgende opdracht:

$ sudo docker pull nginx

We hebben de toegevoegd -P markeer hier om port forwarding van de container naar het hostbesturingssysteem te configureren. Poort 80 wordt gebruikt voor niet-gecodeerd HTTP-verkeer (dat wil zeggen webverkeer). Hiermee krijgt u toegang tot de container vanaf uw hostmachine:

$ sudo docker run -p 80:80 nginx

Deze opdracht wordt in de gekoppelde modus in uw terminal uitgevoerd, wat betekent dat de container letterlijk aan uw terminal is gekoppeld, zodat alle logbestanden van de container daar worden afgedrukt. Zodra de container is opgestart, opent u deze http://localhost in uw webbrowser. Je ziet een Nginx-welkomstscherm zoals hieronder:

De Nginx-container draait nu in uw containermotor. Hoewel Nginx in de gekoppelde modus draait, blijft het alleen actief zolang het open is. U kunt de Nginx-container verlaten door op te drukken Ctrl+C in uw terminal.

Hoe u containers op de achtergrond kunt uitvoeren

Om Nginx op de achtergrond uit te voeren, voegen we nog een vlag toe, -D, voor de vrijstaande modus. Hierdoor wordt de container los van uw terminal gestart, wat betekent dat deze zich op de achtergrond bevindt. Bijvoorbeeld:

$ sudo docker run -d -p 80:80 nginx

U kunt actieve containers op een systeem weergeven. Merk op hoe uw Nginx-container nu op de achtergrond draait en een ID heeft gekregen.

$ sudo docker ps

Een actieve achtergrondcontainer kan worden gedood met behulp van zijn ID. Mogelijk merkt u ook dat de container een naam heeft gekregen. Als er geen is opgegeven, geeft Docker elke container een willekeurige, unieke naam.

$ sudo docker kill 

Je zou dit echter kunnen testen met wat interessantere afbeeldingen. Er zijn er genoeg verkrijgbaar bij de Docker-hub, dat fungeert als centrale opslagplaats voor openbare containerimages.

Dieper duiken met containers

Dit was een korte introductie over containers. Containers kunnen grenzeloos complex zijn, maar ze vormen een fundamentele bouwsteen van de sterk gedistribueerde systemen waarop een groot deel van ons moderne internet draait. Die kracht neemt echter niet weg dat ze op kleinere schaal worden gebruikt. Bekendheid met de basisprincipes van containers en Docker kan de toegangspoort zijn tot het uitvoeren van nuttige lokale services zoals een Minecraft server of Plex op een oude pc.