Introductie
Docker is een populair containerisatietool dat wordt gebruikt om softwaretoepassingen te voorzien van een bestandssysteem dat alles bevat wat ze nodig hebben om te draaien. Door Docker-containers te gebruiken, wordt gegarandeerd dat de software zich op dezelfde manier zal gedragen, ongeacht waar deze wordt ingezet, omdat de runtime-omgeving genadeloos consistent is.
In deze zelfstudie geven we een beknopt overzicht van de relatie tussen Docker-images en Docker-containers. Vervolgens zullen we gedetailleerder kijken naar het uitvoeren, starten, stoppen en verwijderen van containers.
Overzicht
We kunnen een Docker-image beschouwen als een inerte sjabloon die wordt gebruikt om Docker-containers te maken. Images beginnen meestal met een root-bestandssysteem en voegen bestandssysteemwijzigingen en hun overeenkomstige uitvoeringsparameters toe in geordende, alleen-lezen lagen. In tegenstelling tot een typische Linux-distributie bevat een Docker-image meestal alleen de essentiële onderdelen die nodig zijn voor het uitvoeren van de toepassing. De images hebben geen status en ze veranderen niet. In plaats daarvan vormen ze het startpunt voor Docker-containers.
Afbeeldingen komen tot leven met het docker run
-commando, dat een container creëert door een lees-schrijf-laag boven op de afbeelding toe te voegen. Deze combinatie van alleen-lezen lagen bovenop een lees-schrijf-laag staat bekend als een union bestandssysteem. Wanneer er een wijziging wordt aangebracht in een bestaand bestand in een actieve container, wordt het bestand gekopieerd uit de alleen-lezen ruimte naar de lees-schrijf-laag, waar de wijzigingen worden toegepast. De versie in de lees-schrijf-laag verbergt het oorspronkelijke bestand, maar verwijdert het niet. Wijzigingen in de lees-schrijf-laag bestaan alleen binnen een individuele containerinstantie. Wanneer een container wordt verwijderd, gaan alle wijzigingen verloren, tenzij er stappen worden ondernomen om ze te behouden.
Hoe te werken met Docker Containers
Werken met containers
Elke keer dat u het docker run
-commando gebruikt, wordt er een nieuwe container gemaakt van de opgegeven image. Dit kan voor verwarring zorgen, dus laten we eens kijken met een paar voorbeelden:
Stap 1: Twee containers maken
Met het volgende docker run
-commando wordt een nieuwe container gemaakt met behulp van de basisimage ubuntu
. -t
zal ons een terminal geven, en -i
zal ons in staat stellen ermee te communiceren. We vertrouwen op het standaardcommando in het Docker-bestand van de Ubuntu-basisimage, bash
, om ons in een shell te plaatsen.
De opdrachtprompt verandert om aan te geven dat we binnen de container zijn als de rootgebruiker, gevolgd door de container-ID van 12 tekens.
We zullen een wijziging aanbrengen door wat tekst naar de /tmp
-directory van de container te echoën, en vervolgens cat
gebruiken om te controleren of het succesvol is opgeslagen.
OutputExample1
Nu gaan we de container verlaten.
Docker-containers stoppen met uitvoeren zodra het opgegeven commando is voltooid, dus onze container stopte toen we de bash-shell verlieten. Als we docker ps
uitvoeren, het commando om actieve containers weer te geven, zien we de onze niet.
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Als we de -a
-vlag toevoegen, die alle containers, gestopt of actief, toont, zal onze container verschijnen in de lijst:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
Toen de container werd gemaakt, kreeg deze zijn container-ID en een willekeurig gegenereerde naam. In dit geval is 11cc47339ee1 de container-ID en small_sinoussi
is de willekeurig gegenereerde naam. ps -a
toont die waarden, evenals het image waaruit de container werd gebouwd (ubuntu
), wanneer de container werd gemaakt (zes minuten geleden
), en het commando dat erin werd uitgevoerd (/bin/bash
). De uitvoer geeft ook de status van de container aan (Exited
) en hoelang geleden de container die status heeft gekregen (6 seconden geleden
). Als de container nog steeds actief zou zijn, zouden we de status “Up” zien, gevolgd door hoelang deze al actief is.
Als we hetzelfde commando opnieuw uitvoeren, wordt er een geheel nieuwe container gemaakt:
We kunnen zien dat het een nieuwe container is omdat het ID in de opdrachtprompt anders is, en als we naar ons voorbeeldbestand Example1 zoeken, zullen we het niet vinden:
Outputcat: /tmp/Example1: No such file or directory
Dit kan doen vermoeden dat de gegevens zijn verdwenen, maar dat is niet het geval. We zullen nu de tweede container verlaten om te zien dat deze, en onze eerste container met het bestand dat we hebben gemaakt, beide op het systeem staan.
Als we opnieuw de lijst met containers bekijken, verschijnen beide:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
Stap 2: Het Eerste Container Herstarten
Om een bestaande container te herstarten, zullen we het start
commando gebruiken met de -a
vlag om eraan te hechten en de -i
vlag om het interactief te maken, gevolgd door ofwel de container-ID of naam. Zorg ervoor dat je de ID van je container vervangt in het onderstaande commando:
We bevinden ons opnieuw bij de bash-prompt van de container en wanneer we het bestand dat we eerder hebben gemaakt bekijken met cat
, is het nog steeds aanwezig.
OutputExample1
We kunnen nu de container verlaten:
Deze output toont aan dat wijzigingen die binnen de container zijn aangebracht behouden blijven na het stoppen en opnieuw starten ervan. Pas wanneer de container wordt verwijderd, wordt de inhoud verwijderd. Dit voorbeeld illustreert ook dat de wijzigingen beperkt waren tot de individuele container. Toen we een tweede container startten, reflecteerde deze de oorspronkelijke staat van het image.
Stap 3: Beide Containers Verwijderen
We hebben twee containers gemaakt, en we zullen onze korte tutorial afsluiten door ze te verwijderen. Het docker rm
commando, dat alleen werkt op gestopte containers, stelt je in staat om de naam of ID van één of meer containers op te geven, dus we kunnen beide verwijderen met het volgende:
Output11cc47339ee1
kickass_borg
Beide containers, en alle wijzigingen die we erin hebben aangebracht, zijn nu verdwenen.
Conclusie
We hebben gedetailleerd gekeken naar het docker run
commando om te zien hoe het automatisch een nieuwe container maakt telkens wanneer het wordt uitgevoerd. We hebben ook gezien hoe je een gestopte container kunt vinden, starten en ermee verbinden. Als je meer wilt leren over het beheren van containers, zou je geïnteresseerd kunnen zijn in de gids, Het Geven van Namen aan Docker Containers: 3 Tips voor Beginners.
Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers