Docker image vs container

Docker image vs container

Å forstå prosessen Docker bruker for å lagre data gjennom bilder og containere vil hjelpe deg med å designe Docker -applikasjonene dine bedre. Docker -bilder er som maler mens Docker -containere er de løpende forekomstene som er opprettet fra disse malene. Docker bruker en lagdelt tilnærming til lagring av bilder og containere.

Bilder og lag

Et Docker -bilde opprettes fra flere lag. Hvis vi tar et eksempel på en DockerFile, konverteres hver instruksjon til et lag. Her er en enkel Dockerfile:

Fra node: 6.9.2
Kopier server.JS .
CMD -nodeserver.JS

Hver linje i ovennevnte dockerfile vil lage et lag. Fra uttalelsen vil se etter noden: 6.9.2 Bilde i det lokale registeret. Hvis den ikke finner den der, vil den laste den ned fra Docker Hub. Da vil Docker opprette det første laget. Neste kopieringsuttalelse legger til serveren.JS -fil til bildet som et andre lag. Det siste laget kjører en node.JS -applikasjon. Alle disse lagene er stablet oppå hverandre. Hvert ekstra lag legges til som en forskjell fra laget før det.


Containere og lag

Containere er laget av bilder. Når en beholder opprettes fra et bilde, settes et tynt lese-/skrivelag på toppen av bildet (legg merke til at bildelagene er uforanderlige, containerslag er ikke). Eventuelle endringer i beholderen blir lagt på dette lese-/skrivelaget i løpet av beholderens levetid. Når en beholder blir slettet, fjernes det tilhørende tynnlesing/skrivelaget. Det betyr at flere containere kan dele det samme bildet. Hvert beholderlag vil opprettholde sine egne data trygt på toppen av Docker -bildet.


Bilder og containere

La oss prøve et enkelt eksempel. Du kan bruke Docker Images -kommandoen for å finne alle bildene:

$ Docker -bilder
Repository Tag Image ID Opprettet størrelse

Og Docker PS -kommandoen for å finne containere:

$ docker ps
Container ID Image Command opprettet statusporter navn

Dette er en fersk dockerinstallasjon. Så det er ikke noe bilde eller container til stede. Du kan kjøre Docker Run -It Node: 6.9.2 Kommando for å starte en beholder.

$ Docker Run -It Node: 6.9.2
Kan ikke finne bilde 'Node: 6.9.2 'lokalt
6.9.2: Trekk fra bibliotek/node
75A822CD7888: Trekk komplett
57De64C72267: Trekk komplett
4306be1e8943: Trekk komplett
871436AB7225: Trekk komplett
0110c26a367a: Trekk komplett
1F04FE713F1B: Trekk komplett
AC7C0B5FB553: Trekk komplett
Digest: SHA256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043
Status: Lastet ned nyere bilde for node: 6.9.2
>

Hvis vi igjen sjekker Docker -bildene, finner vi:

$ Docker -bilder
Repository Tag Image ID Opprettet størrelse
Node 6.9.2 FAAADB4AAF9B 11 måneder siden 655MB

Og hvis vi sjekker beholderen, finner vi:

$ docker ps
Container ID Image Command opprettet statusporter navn
8c48c7e03bc7 node: 6.9.2 "node" for 20 sekunder siden opp 18 sekunder Reverent_jackson

Hvis vi starter en annen beholder fra det samme bildet ved hjelp av kommandoen:

$ Docker Run -It Node: 6.9.2

Og sjekk igjen, vi ser:

$ Docker -bilder
Repository Tag Image ID Opprettet størrelse
Node 6.9.2 FAAADB4AAF9B 11 måneder siden 655MB

Og

$ docker ps
Container ID Image Command opprettet statusporter navn
96e6db955276 Node: 6.9.2 "node" for 24 sekunder siden opp 23 sekunder cocky_dijkstra
8c48c7e03bc7 node: 6.9.2 "node" for 4 minutter siden opp 4 minutter Reverent_jackson

De to containerne med container ID 96E6DB955276 og 8C48C7E03BC7 kjører begge på toppen av Docker -bildet med bilde -ID FAAADB4AAF9B. De tynne lese-/skrivelagene til Docker -containerne er bosatt på toppen av laget av Docker -bildet.

Tips:

Du kan fjerne Docker -containere med kommandoen Docker RM [Container ID] og fjerne Docker -bilder med kommandoen Docker RMI [Bilde -ID].

Bildeknuten: 6.9.2 Vi lastet ned fra Docker Hub er også opprettet ved å kombinere flere lag. Du kan sjekke lagene med bilder ved hjelp av Docker History [Image ID].

$ docker historie faaadb4aaf9b
Bilde laget av størrelse
FAAADB4AAF9B 11 måneder siden /bin /sh -c #(nop) cmd ["node"] 0b
11 måneder siden/bin/sh -c curl -slo "https: // nodejs.org/d 42.5MB
11 måneder siden /bin /sh -c #(nop) env node_version = 6.9.2 0b
11 måneder siden /bin /sh -c #(nop) env npm_config_loglevel 0b
11 måneder siden /bin /sh -c set -ex && for nøkkel i 955 108kb
11 måneder siden /bin /sh -c groupadd --gid 1000 node && u 335kb
11 måneder siden /bin /sh -c apt-get update && apt-get Insta 323MB

Konklusjon

En populær måte å forklare bilder og containere er å sammenligne et bilde med en klasse og en beholder med forekomsten av den klassen. Den lagdelte tilnærmingen til Docker -bilder og containere hjelper til med å holde størrelsen på bilder og containere små.

Referanser:

  • https: // dokumenter.Docker.com/motor/userguide/storagedriver/bilder og containers/
  • Docker image vs container
  • https: // stackoverflow.com/spørsmål/23735149/docker-image-vs-container