Å 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:
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:
Repository Tag Image ID Opprettet størrelse |
Og Docker PS -kommandoen for å finne containere:
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:
Repository Tag Image ID Opprettet størrelse |
Node 6.9.2 FAAADB4AAF9B 11 måneder siden 655MB |
Og hvis vi sjekker beholderen, finner vi:
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:
Repository Tag Image ID Opprettet størrelse |
Node 6.9.2 FAAADB4AAF9B 11 måneder siden 655MB |
Og
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 |
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