Differenze tra immagine e container Docker
Immagine, container, template… che confusione!
Se non ti sono chiare le differenze tra il concetto di immagine e di container in Docker, leggi questo articolo per scoprirne di più!
Immagine
Il concetto di immagine può essere paragonato a quello di una classe nel mondo della programmazione orientata agli oggetti.
Se parliamo di macchine virtuali, le immagini sono solo snapshots della macchina virtuale in esecuzione che vienefotografata in momenti diversi, mentre le immagini in Docker sono immutabili e rappresentano la ricetta di un’applicazione.
Facendo un paragone con il mondo reale, l’immagine rappresenta una vera e propria ricetta con tutti gli ingredienti e il procedimento che dev’essere seguito passo passo per realizzare un certo piatto.
L’elenco delle immagini è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:
docker images
Elenco delle immagini presenti visibili tramite Docker Desktop
Docker container
Se un’immagine Docker è una classe, un Docker container (spesso abbreviato solamente in container) è l’istanza di una classe, o anche un oggetto.
Puoi creare, avviare, interrompere, spostare o eliminare un container utilizzando la riga di comando o Docker Desktop, e puoi connettere un container a una o più reti, aggiungere spazio di archiviazione o persino creare una nuova immagine in base al suo stato attuale.
L’elenco dei container è possibile visualizzarlo tramite Docker Desktop oppure eseguendo il comando seguente:
docker ps
Elenco dei container presenti visibili tramite Docker Desktop
Un’applicazione viene eseguita utilizzando un cluster formato da uno o più container che sono isolati l’uno dall’altro e anche dalla macchina host in cui sono in esecuzione.
Nel mondo reale, capita spesso che un software funzioni su un computer ma non funzioni sul sistema di altre persone, e questo a causa di ambienti diversi.
Questo problema viene completamente risolto grazie alle immagini Docker e utilizzando questa tecnologia, l’applicazione funzionerà allo stesso modo sul sistema di chiunque.
Ogni sviluppatore di un team avrà esattamente la stessa istanza di sviluppo e ogni istanza di una certa applicazione sarà esattamente la stessa che hai visto in esecuzione su un altro sistema.
Differenze tra container e immagine
Proviamo a schematizzare un po’ le principali differenze elencate prima in questa tabella:
Immagine | Container |
---|---|
Rappresenta il template del container | Rappresenta l’istanza dell’immagine |
Entità logica e astratta, spesso descritta tramite un Dockerfile | Entità reale e accedibile anche tramite riga di comando |
Viene creata una volta | Può essere creato n volte |
Non hanno uno stato | Hanno uno stato preciso: avviato, arrestato, ecc. |
OOP: classe | OOP: oggetto |
Mondo reale: ricetta | Mondo reale: piatto cucinato |
Semplice, no?