Docker Immagine vs Contenir

Docker Immagine vs Contenir

Comprendere il processo che Docker utilizza per archiviare i dati tramite immagini e contenitori ti aiuterà a progettare meglio le tue applicazioni Docker. Le immagini Docker sono come modelli mentre i contenitori Docker sono le istanze in esecuzione create da quei modelli. Docker utilizza un approccio a strati per conservare immagini e contenitori.

Immagini e strati

Un'immagine Docker viene creata da più livelli. Se prendiamo un esempio di Dockerfile, ogni istruzione viene convertita in un livello. Ecco un semplice Dockerfile:

Dal nodo: 6.9.2
Copia server.js .
Server nodo CMD.js

Ogni riga nel sud di Dockerfile creerà un livello. L'istruzione from cercherà il nodo: 6.9.2 Immagine nel registro locale. Se non lo trova lì, lo scaricherà dall'hub Docker. Quindi Docker creerà il primo livello. L'istruzione di copia successiva aggiunge il server.file js all'immagine come secondo livello. L'ultimo livello esegue un nodo.Applicazione JS. Tutti questi strati sono impilati uno sopra l'altro. Ogni livello aggiuntivo viene aggiunto come differenza dal livello prima di esso.


Contenitori e strati

I contenitori sono creati dalle immagini. Quando un contenitore viene creato da un'immagine, viene messo un livello sottile di lettura/scrittura sulla parte superiore dell'immagine (nota che i livelli di immagine sono immutabili, gli strati del contenitore non lo sono). Eventuali modifiche apportate al contenitore vengono apportate su questo livello di lettura/scrittura durante la vita del contenitore. Quando viene eliminato un contenitore, viene rimosso lo strato di lettura/scrittura sottile associato. Significa che più contenitori possono condividere la stessa immagine. Ogni livello contenitore manterrà i propri dati in modo sicuro in cima all'immagine Docker.


Immagini e contenitori

Proviamo un semplice esempio. È possibile utilizzare il comando Docker Images per trovare tutte le immagini:

$ Docker Immagini
Dimensione creata immagine del tag repository

E il comando Docker PS per trovare contenitori:

$ Docker PS
Comando ID contenitore Comando immagine Nomi delle porte di stato creato

Questa è un'installazione di Docker Fresh. Quindi non c'è immagine o contenitore presente. È possibile eseguire il Docker Run -It Nodo: 6.9.2 comando per avviare un contenitore.

$ Docker run -it nodo: 6.9.2
Impossibile trovare l'immagine 'nodo: 6.9.2 'localmente
6.9.2: estrazione dalla libreria/nodo
75A822CD7888: pull completo
57DE64C72267: pull completo
4306Be1e8943: pull completo
871436ab7225: pull complet
0110c26a367a: pull completo
1f04fe713f1b: pull completo
AC7C0B5FB553: Pull Complete
Digest: sha256: 2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043
Stato: più recente immagine per il nodo: 6.9.2
>

Ora se controlliamo di nuovo le immagini Docker, troviamo:

$ Docker Immagini
Dimensione creata immagine del tag repository
nodo 6.9.2 faaadb4aaf9b 11 mesi fa 655 MB

E se controlliamo il contenitore, troviamo:

$ Docker PS
Comando ID contenitore Comando immagine Nomi delle porte di stato creato
8c48c7e03bc7 nodo: 6.9.2 "nodo" 20 secondi fa più di 18 secondi reverent_jackson

Se iniziamo un altro contenitore dalla stessa immagine usando il comando:

$ Docker run -it nodo: 6.9.2

E controlla di nuovo, vediamo:

$ Docker Immagini
Dimensione creata immagine del tag repository
nodo 6.9.2 faaadb4aaf9b 11 mesi fa 655 MB

E

$ Docker PS
Comando ID contenitore Comando immagine Nomi delle porte di stato creato
96e6db955276 nodo: 6.9.2 "nodo" 24 secondi fa 23 secondi cocky_dijkstra
8c48c7e03bc7 nodo: 6.9.2 "nodo" 4 minuti fa 4 minuti reverent_jackson

I due contenitori con ID contenitore 96E6DB955276 e 8C48C7E03BC7 sono entrambi in esecuzione sull'immagine Docker con l'immagine ID FAAADB4AAF9B. Gli strati sottili di lettura/scrittura dei contenitori Docker risiedono in cima allo strato dell'immagine Docker.

Suggerimenti:

È possibile rimuovere i contenitori Docker con il comando Docker RM [ID contenitore] e rimuovere le immagini Docker con il comando Docker RMI [ID immagine].

Il nodo dell'immagine: 6.9.2 Abbiamo scaricato da Docker Hub è anche creata combinando più livelli. È possibile controllare i livelli di immagini usando la cronologia docker [ID immagine].

$ Docker History faaadb4aaf9b
Immagine creata creata dalla dimensione
faaadb4aaf9b 11 mesi fa /bin /sh -c #(nop) cmd ["nodo"] 0b
11 mesi fa/bin/sh -c curl -slo "https: // nodejs.org/d 42.5 MB
11 mesi fa /bin /sh -c #(nop) env node_version = 6.9.2 0b
11 mesi fa /bin /sh -c #(nop) env npm_config_loglevel 0b
11 mesi fa /bin /sh -c set -ex && per la chiave in 955 108kb
11 mesi fa /bin /sh -c groupadd -gid 1000 nodo && u 335kb
11 mesi fa /bin /sh -c apt-get update && apt-get insta 323mb

Conclusione

Un modo popolare per spiegare immagini e contenitori è confrontare un'immagine con una classe e un contenitore con l'istanza di quella classe. L'approccio a strati di immagini e contenitori Docker aiuta a mantenere piccole le dimensioni di immagini e contenitori.

Riferimenti:

  • https: // docs.Docker.com/motore/userguide/smoragedriver/immagini andcontainer/
  • Docker Immagine vs Contenir
  • https: // stackoverflow.com/domande/23735149/docker-image-vs-container