Il ciclo di vita di un container docker incominicia con le operazioni di creazione (create), prosegue con l’operazione di run e successivamente con le operazioni di pausa/terminazione. In questo post verranno analizzati i singoli aspetti. Riprendendo il post precedente sull’analisi architetturale di docker analizziamo il ciclo di vita di un container.
Ecco cosa succede durante i passi di istanziazione di un container:
- l’immagine del container viene scaricata in locale (se non esiste una copia in locale)
- viene creato il container
- viene eseguito il container in un ambiente isoltato
- il container viene terminato (una volta inviato il comando per terminarne l’esecuzione)
Creazione di un container
Il comando docker create, consente di creare un nuovo container a partire da un’immagine esistente:
docker create <nomeimmagine>
Il comando docker run può essere riassunto nel seguente modo:
docker run = docker create + docker start
ed esegue in maniera sequenziale le operazioni docker create e docker start.
Terminare l’esecuzione di un container
E’ possibile terminare l’esecuzione di un container utilizzando :
docker stop <containerID>
oppure
docker kill <containerID>
La differenza dei due comandi è piuttosto fine: come avviene per i processi linux che sono in ascolto sui vari signal che gli vengono inviati, anche i container docker gestiscono il SIGTERM e SIGKILL. Il comando stop permette di terminare in maniera graceful un container (eventualmente è possibile gestire le operazioni che dovranno essere eseguite in fase di chiusra), mentre il comando kill termina in maniera drastica. In entrambi i casi il segnale viene inviato al processo principale del container indicato. Inviando un segnale SIGKILL il processo che lo riceve non effettuerà alcuna operazione di chiusura/pulizia. Se il processo non risponde si rende necessario inviare un comando SIGKIKILL che verrà sempre eseguito.
Accedere ad un container
Utilizzando il comando exec è possibile eseguire un comando all’interno di un container :
docker exec -it <containerID> <command>
dove con exec viene indicato di utilizzare un comando esterno e con -it viene fornito l’input al container. Il comando da eseguire viene indicato con il parametro command.