Forskjellen mellom Docker-bilder og beholdere

1. Oversikt

Docker er et verktøy for å lage, distribuere og kjøre applikasjoner enkelt. Det lar oss pakke applikasjonene våre med alle avhengigheter, og distribuere dem som individuelle pakker. Docker garanterer at applikasjonen vår vil kjøre på samme måte i hver Docker-forekomst.

Når vi begynner å bruke Docker, er det det to hovedkonsepter vi må være tydelige på - bilder og containere.

I denne opplæringen lærer vi hva de er og hvordan de er forskjellige.

2. Docker-bilder

Et bilde er en fil som representerer et pakket program med alle avhengigheter som trengs for å kjøre riktig. Med andre ord kan vi si at a Docker-bilde er som en Java-klasse.

Bilder er bygd som en serie lag. Lag er samlet oppå hverandre. Så, hva er et lag? Enkelt sagt, et lag er et bilde.

La oss si at vi vil lage et Docker-bilde av et Hello World Java-program. Det første vi må tenke på er hva applikasjonen vår trenger.

For å starte er det et Java-program, så vi trenger en JVM. OK, dette virker enkelt, men hva trenger en JVM for å kjøre? Det trenger et operativsystem. Derfor, vårt Docker-bilde vil ha et operativsystemlag, en JVM og Hello World-applikasjonen.

En stor fordel med Docker er det store samfunnet. Hvis vi vil bygge videre på et bilde, kan vi gå til Docker Hub og søke om bildet vi trenger er tilgjengelig.

La oss si at vi vil opprette en database ved hjelp av PostgreSQL-databasen. Vi trenger ikke lage et nytt PostgreSQL-bilde fra bunnen av. Vi går bare til Docker Hub, søker etter postgres, som er det offisielle billednavnet for Docker for PostgresSQL, velger du versjonen vi trenger, og kjører den.

Hvert bilde vi oppretter eller henter fra Docker Hub, lagres i filsystemet vårt og identifiseres av navnet og merkelappen. Det kan det også være identifisert av bildets id.

Bruker docker-bilder kommando, kan vi se en liste over bilder vi har tilgjengelig i vårt filsystem:

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE postgres 11.6 d3d96b1e5d48 4 uker siden 332MB mongo siste 9979235fc504 6 uker siden 364MB rabbitmq 3-management 44c4867e4a8b 8 uker siden 180MB mysql 8.0.18 d435e2 2 måneder 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. Kjører Docker Images

Et bilde kjøres med docker kjøre kommando med bilde navn og tag. La oss si at vi vil kjøre postgres 11.6-bildet:

docker run -d postgres: 11.6

Legg merke til at vi ga -d alternativ. Dette forteller Docker å kjøre bildet i bakgrunnen - også kjent som løsrevet modus.

Bruker docker ps kommando vi kan sjekke om bildet vårt kjører, bør vi bruke denne kommandoen:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3376143f0991 postgres: 11.6 "docker-entrypoint.s…" 3 minutter siden Opp 3 minutter 5432 / tcp tender_heyrovsky

Legg merke til CONTAINER ID i utgangen over. La oss ta en titt på hva en container er og hvordan den er relatert til et bilde.

4. Docker Containers

En container er en forekomst av et bilde. Hver container kan identifiseres med ID. Hvis vi går tilbake til vår Java-utviklingsanalogi, kan vi si det en container er som en forekomst av en klasse.

Docker definerer syv tilstander for en container: opprettet, starter på nytt, løping, fjerne, stoppet, avsluttet, og død. Dette er viktig å vite. Siden en container bare er en forekomst av bildet, trenger den ikke å kjøre.

La oss nå tenke igjen om løpe kommando vi har sett ovenfor. Vi har sagt at det brukes til å kjøre bilder, men det er ikke helt nøyaktig. Sannheten er at løpe kommandoen er vant til skape og start en ny beholder av bildet.

En stor fordel er at containere er som lette virtuelle maskiner. Deres oppførsel er helt isolert fra hverandre. Dette betyr at vi kan kjøre flere containere med det samme bildet, og ha hver i en annen tilstand med forskjellige data og forskjellige IDer.

Å kunne kjøre flere containere med det samme bildet samtidig er en stor fordel fordi det gir oss en enkel måte å skalere applikasjoner på. La oss for eksempel tenke på mikrotjenester. Hvis hver tjeneste er pakket som et Docker-bilde, betyr det at nye tjenester kan distribueres som containere etter behov.

5. Containers Lifecycle

Tidligere nevnte vi de syv tilstandene til en container, la oss nå se hvordan vi kan bruke docker kommandolinjeverktøy for å behandle de forskjellige livssyklusstatusene.

Å starte en ny container krever at vi gjør det skape det og da start den. Dette betyr at den må gå gjennom opprettingstilstanden før den kan kjøre. Vi kan gjøre dette ved å opprette og starte beholderen eksplisitt:

docker container create: docker container start 

Eller vi kan enkelt gjøre dette med løpe kommando:

docker kjøre:

Vi kan stoppe en kjørende container på pause og deretter sette den i kjører tilstand igjen:

docker pause docker pauser 

En container som er satt på pause, viser "Pauset" som status når vi sjekker prosessene:

$ docker ps CONTAINER ID BILDE KOMMANDO LAGET STATUS PORTS NAVN 9bef2edcad7b postgres: 11.6 "docker-entrypoint.s…" 5 minutter siden Opp 4 minutter (pause) 5432 / tcp tender_heyrovsky

Vi kan også stoppe en kjørende container og kjøre den på nytt:

docker stopp docker start 

Og til slutt kan vi fjerne en container:

docker container rm 

Bare containere i stoppet eller opprettet tilstand kan fjernes.

For mer informasjon om Docker-kommandoene, kan vi se Docker Command Line Reference.

6. Konklusjon

I denne artikkelen diskuterte vi Docker-bilder og containere og hvordan de skiller seg ut. Bilder beskriver applikasjonene og hvordan de kan kjøres. Beholdere er bildeforekomster der flere beholdere med det samme bildet kan kjøres, hver i en annen tilstand.

Vi har også snakket om containernes livssyklus og lært de grunnleggende kommandoene for å administrere dem.

Nå som vi vet det grunnleggende, er det på tide å lære mer om den spennende verdenen til Docker og begynne å øke kunnskapen vår!


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