Forskellen mellem dockerbilleder og containere

1. Oversigt

Docker er et værktøj til nemt at oprette, implementere og køre applikationer. Det giver os mulighed for at pakke vores applikationer med alle afhængigheder og distribuere dem som individuelle bundter. Docker garanterer, at vores applikation kører på samme måde på hver Docker-forekomst.

Når vi begynder at bruge Docker, er der to hovedkoncepter vi skal være klare på - billeder og containere.

I denne vejledning lærer vi, hvad de er, og hvordan de adskiller sig.

2. Docker-billeder

Et billede er en fil, der repræsenterer et pakket program med alle de afhængigheder, der er nødvendige for at køre korrekt. Med andre ord kan vi sige, at en Docker-billede er som en Java-klasse.

Billeder er bygget som en række lag. Lag samles oven på hinanden. Så hvad er et lag? Kort sagt er et lag et billede.

Lad os sige, at vi vil oprette et Docker-billede af en Hello World Java-applikation. Den første ting, vi skal tænke på, er, hvad vores applikation har brug for.

For at starte er det en Java-applikation, så vi har brug for en JVM. OK, dette virker let, men hvad har en JVM brug for at køre? Det har brug for et operativsystem. Derfor, vores Docker-image har et operativsystemlag, en JVM og vores Hello World-applikation.

En stor fordel ved Docker er dets store samfund. Hvis vi vil bygge videre på et billede, kan vi gå til Docker Hub og søge, om det billede, vi har brug for, er tilgængeligt.

Lad os sige, at vi vil oprette en database ved hjælp af PostgreSQL-databasen. Vi behøver ikke oprette et nyt PostgreSQL-billede fra bunden. Vi går bare til Docker Hub, søger efter postgres, som er det officielle Docker-billednavn for PostgresSQL, skal du vælge den version, vi har brug for, og køre den.

Hvert billede, vi opretter eller trækker fra Docker Hub, gemmes i vores filsystem og identificeres ved navn og tag. Det kan det også være identificeret ved dets billed-id.

Bruger docker-billeder kommando, kan vi se en liste over billeder, vi har tilgængelige i vores filsystem:

$ docker-billeder REPOSITORY TAG BILLED-ID OPRETTET STØRRELSE postgres 11.6 d3d96b1e5d48 4 uger siden 332MB mongo seneste 9979235fc504 6 uger siden 364MB rabbitmq 3-management 44c4867e4a8b 8 uger siden 180MB mysql 8.0.18 d435e2 2db 2 måneder siden 757MB flyway / flyway 6.0.8 0c11020ffd69 3 måneder siden 247MB java 8-jre e44d62cf8862 3 år siden 311MB

3. Kørsel af Docker-billeder

Et billede køres ved hjælp af docker-kørsel kommando med billednavnet og taggen. Lad os sige, at vi vil køre postgres 11.6-billedet:

docker run -d postgres: 11.6

Bemærk, at vi leverede -d mulighed. Dette fortæller Docker at køre billedet i baggrunden - også kendt som løsrevet tilstand.

Bruger docker ps kommando, vi kan kontrollere, om vores billede kører, skal vi bruge denne kommando:

$ docker ps CONTAINER ID BILLEDE KOMMANDO OPRET STATUS PORTS NAVNE 3376143f0991 postgres: 11.6 "docker-entrypoint.s…" 3 minutter siden Op 3 minutter 5432 / tcp tender_heyrovsky

Læg mærke til CONTAINER ID i output ovenfor. Lad os se på, hvad en container er, og hvordan den er relateret til et billede.

4. Docker-containere

En container er en forekomst af et billede. Hver container kan identificeres ved hjælp af dens ID. Når vi går tilbage til vores Java-udviklingsanalogi, kan vi sige det en container er som en forekomst af en klasse.

Docker definerer syv tilstande for en container: oprettet, genstart, kører, fjernelse, pause, afsluttetog død. Dette er vigtigt at vide. Da en container kun er en forekomst af billedet, behøver den ikke køre.

Lad os nu tænke igen om løb kommando, vi har set ovenfor. Vi har sagt, at det bruges til at køre billeder, men det er ikke helt nøjagtigt. Sandheden er, at løb kommando er vant til skab og Start en ny beholder med billedet.

En stor fordel er, at containere er som lette VM'er. Deres adfærd er helt isoleret fra hinanden. Dette betyder, at vi kan køre flere containere med det samme billede og have hver enkelt i en anden tilstand med forskellige data og forskellige id'er.

At kunne køre flere containere med det samme billede på samme tid er en stor fordel, fordi det giver os en nem måde at skalere applikationer på. Lad os for eksempel tænke på mikrotjenester. Hvis hver tjeneste er pakket som et Docker-billede, betyder det, at nye tjenester kan implementeres som containere efter behov.

5. Containers livscyklus

Tidligere nævnte vi de syv stater i en container, lad os nu se, hvordan vi kan bruge docker kommandolinjeværktøj til at behandle de forskellige livscyklustilstande.

At starte en ny container kræver, at vi gør det skab det og derefter Start det. Dette betyder, at den skal gennemgå oprettelsesstaten, før den kan køre. Vi kan gøre dette ved at oprette og starte containeren eksplicit:

docker container oprette: docker container start 

Eller vi kan nemt gøre dette med løb kommando:

docker-kørsel:

Vi kan sætte en kørende container på pause og derefter sætte den i kørende tilstand igen:

docker pause docker pause 

En container, der er sat på pause, viser "Pauset" som status, når vi kontrollerer processerne:

$ docker ps CONTAINER ID BILLEDE KOMMANDO OPRET STATUS PORTS NAVNE 9bef2edcad7b postgres: 11.6 "docker-entrypoint.s…" 5 minutter siden Op 4 minutter (pause) 5432 / tcp tender_heyrovsky

Vi kan også stoppe en kørende container og derefter køre den igen:

docker stop docker start 

Og endelig kan vi fjerne en container:

docker container rm 

Kun containere i standset eller oprettet tilstand kan fjernes.

For mere information om Docker-kommandoer, kan vi henvise til Docker Command Line Reference.

6. Konklusion

I denne artikel diskuterede vi Docker-billeder og containere, og hvordan de adskiller sig. Billeder beskriver applikationerne, og hvordan de kan køres. Containere er billedforekomsterne, hvor flere containere med det samme billede kan køres, hver i en anden tilstand.

Vi har også talt om containernes livscyklus og lært de grundlæggende kommandoer til at styre dem.

Nu hvor vi kender det grundlæggende, er det tid til at lære mere om Docker's spændende verden og begynde at øge vores viden!


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