Verschil tussen Docker-afbeeldingen en containers

1. Overzicht

Docker is een tool om eenvoudig applicaties te maken, te implementeren en uit te voeren. Het stelt ons in staat om onze applicaties met alle afhankelijkheden te verpakken en ze als individuele bundels te distribueren. Docker garandeert dat onze applicatie op elke Docker-instantie op dezelfde manier werkt.

Wanneer we Docker gaan gebruiken, zijn er twee hoofdconcepten we moeten duidelijk zijn over - afbeeldingen en containers.

In deze tutorial leren we wat ze zijn en hoe ze verschillen.

2. Docker-afbeeldingen

Een image is een bestand dat een verpakte applicatie vertegenwoordigt met alle afhankelijkheden die nodig zijn om correct te werken. Met andere woorden, we zouden kunnen zeggen dat a Docker-image is als een Java-klasse.

Afbeeldingen worden opgebouwd als een reeks lagen. Lagen worden op elkaar gemonteerd. Dus, wat is een laag? Simpel gezegd, een laag is een afbeelding.

Stel dat we een Docker-afbeelding willen maken van een Hello World Java-applicatie. Het eerste waar we aan moeten denken, is wat onze applicatie nodig heeft.

Om te beginnen is het een Java-applicatie, dus we hebben een JVM nodig. OK, dit lijkt eenvoudig, maar wat heeft een JVM nodig om te draaien? Het heeft een besturingssysteem nodig. Daarom onze Docker-image heeft een besturingssysteemlaag, een JVM en onze Hello World-applicatie.

Een groot voordeel van Docker is de grote community. Als we willen voortbouwen op een afbeelding, kunnen we naar Docker Hub gaan en zoeken of de afbeelding die we nodig hebben beschikbaar is.

Laten we zeggen dat we een database willen maken met behulp van de PostgreSQL-database. We hoeven niet helemaal opnieuw een nieuwe PostgreSQL-afbeelding te maken. We gaan gewoon naar Docker Hub, zoeken naar postgres, de officiële naam van Docker voor PostgresSQL, kies de versie die we nodig hebben en voer het uit.

Elke afbeelding die we maken of ophalen van Docker Hub wordt opgeslagen in ons bestandssysteem en wordt geïdentificeerd door zijn naam en tag. Het kan ook zijn geïdentificeerd door zijn afbeelding-ID.

De ... gebruiken docker afbeeldingen commando, kunnen we een lijst met afbeeldingen bekijken die we beschikbaar hebben in ons bestandssysteem:

$ docker images REPOSITORY TAG AFBEELDING ID GEMAAKT SIZE postgres 11.6 d3d96b1e5d48 4 weken geleden 332MB mongo latest 9979235fc504 6 weken geleden 364MB rabbitmq 3-management 44c4867e4a8b 8 weken geleden 180MB mysql8.0.18 d435eee2caf.b. 2 maanden geleden 757MB flyway / flyway 6.0.8 0c11020ffd69 3 maanden geleden 247MB java 8-jre e44d62cf8862 3 jaar geleden 311MB

3. Docker-images uitvoeren

Een afbeelding wordt uitgevoerd met behulp van de docker uitvoeren commando met de afbeeldingsnaam en tag. Laten we zeggen dat we de postgres 11.6-afbeelding willen uitvoeren:

docker run -d postgres: 11.6

Merk op dat we het -d keuze. Dit vertelt Docker om de afbeelding op de achtergrond uit te voeren - ook bekend als de ontkoppelde modus.

De ... gebruiken docker ps commando kunnen we controleren of onze afbeelding draait, we zouden dit commando moeten gebruiken:

$ docker ps CONTAINER ID BEELDOPDRACHT GEMAAKT STATUS POORTEN NAMEN 3376143f0991 postgres: 11.6 "docker-entrypoint.s…" 3 minuten geleden Up 3 minuten 5432 / tcp tender_heyrovsky

Let op de CONTAINER-ID in de uitvoer hierboven. Laten we eens kijken wat een container is en hoe deze gerelateerd is aan een afbeelding.

4. Docker-containers

Een container is een instantie van een afbeelding. Elke container kan worden geïdentificeerd aan de hand van zijn ID. Als we teruggaan naar onze Java-ontwikkelingsanalogie, zouden we dat kunnen zeggen een container is als een instantie van een klasse.

Docker definieert zeven toestanden voor een container: gemaakt, herstarten, rennen, Verwijderen, pauzeerde, verlaten, en dood. Dit is belangrijk om te weten. Aangezien een container slechts een instantie van de afbeelding is, hoeft deze niet te worden uitgevoerd.

Laten we nu nog eens nadenken over de rennen commando dat we hierboven hebben gezien. We hebben gezegd dat het wordt gebruikt om afbeeldingen uit te voeren, maar dat is niet helemaal juist. De waarheid is dat de rennen commando wordt gebruikt creëren en begin een nieuwe container van de afbeelding.

Een groot voordeel is dat containers als lichtgewicht VM's zijn. Hun gedrag is volledig van elkaar geïsoleerd. Dit betekent dat we meerdere containers met dezelfde afbeelding kunnen uitvoeren, met elk een andere staat met verschillende gegevens en verschillende ID's.

Het is een groot voordeel om meerdere containers met dezelfde afbeelding tegelijkertijd te kunnen draaien, omdat het ons een eenvoudige manier biedt om applicaties te schalen. Laten we bijvoorbeeld eens nadenken over microservices. Als elke service is verpakt als een Docker-image, betekent dit dat nieuwe services op aanvraag als containers kunnen worden geïmplementeerd.

5. Levenscyclus van containers

Eerder noemden we de zeven toestanden van een container. Laten we nu eens kijken hoe we de havenarbeider opdrachtregelprogramma om de verschillende levenscyclusstatussen te verwerken.

Het opstarten van een nieuwe container vereist dat we dat doen creëren het en dan begin het. Dit betekent dat het de aanmaakstatus moet doorlopen voordat het kan worden uitgevoerd. We kunnen dit doen door de container expliciet te maken en te starten:

docker container maken: docker container start 

Of we kunnen dit eenvoudig doen met de rennen opdracht:

docker uitvoeren:

We kunnen een actieve container pauzeren en deze vervolgens weer in de actieve status zetten:

docker pauze docker unpause 

Een gepauzeerde container toont 'Onderbroken' als de status wanneer we de processen controleren:

$ docker ps CONTAINER ID BEELDOPDRACHT GEMAAKT STATUS POORTEN NAMEN 9bef2edcad7b postgres: 11.6 "docker-entrypoint.s…" 5 minuten geleden 4 minuten (onderbroken) 5432 / tcp tender_heyrovsky

We kunnen ook een actieve container stoppen en deze vervolgens opnieuw uitvoeren:

docker stop docker start 

En tot slot kunnen we een container verwijderen:

docker container rm 

Alleen containers in de gestopte of aangemaakte status kunnen worden verwijderd.

Voor meer informatie over de Docker-opdrachten, kunnen we de Docker Command Line Reference raadplegen.

6. Conclusie

In dit artikel hebben we Docker-afbeeldingen en -containers besproken en hoe ze verschillen. Afbeeldingen beschrijven de toepassingen en hoe ze kunnen worden uitgevoerd. Containers zijn de installatiekopieën, waarbij meerdere containers van dezelfde afbeelding kunnen worden uitgevoerd, elk in een andere staat.

We hebben ook gesproken over de levenscyclus van containers en hebben de basiscommando's geleerd om ze te beheren.

Nu we de basis kennen, is het tijd om meer te leren over de opwindende wereld van Docker en om onze kennis te vergroten!


$config[zx-auto] not found$config[zx-overlay] not found