Container lifecycle e persistenza dei dati
La natura così istantanea in creazione dei container, lascia a molti l'impressione che non siano persistenti, cioè non possano contenere dati e mentenerli tra uno stop e il successivo start. Non è così.
E' facile provarlo, creando un container Ubuntu per esempio, creando un file all'interno di esso, fermandolo, facendolo ripartire e controllando che il file è ancora lì:
docker container run --name persistency_test -it ubuntu /bin/bashroot@d5fbbcea1a0a:/# pwdroot@d5fbbcea1a0a:/# cd tmproot@d5fbbcea1a0a:/# echo "testo di prova" > prova.txtroot@d5fbbcea1a0a:/# ctrl+pqdocker container stop persistency_testdocker container start persistency_testdocker container exec -it persistency_test /bin/bashroot@d5fbbcea1a0a:/# cd tmproot@d5fbbcea1a0a:/# cat prova.txt
Vedrete che il file è ancora lì e contiene "testo di prova". Per perdere i dati dovremmo stoppare il container e cancellarlo con docker container rm. Piccola nota su docker container rm, per cancellare un container in esecuzione occorre aggiungere l'opzione -f. E' tuttavia considerata una bad practice, perchè non ha nessuna possiblità ai processi in esecuzione di chiudersi correttamente. Parlando in termini LINUX, l'uso di docker container stop invia un SIGTERM al processo con PID 1 del container. Il comando rm su un container in esecuzione invia un SIGKILL direttamente.
Detto questo, per avere dei dati che sopravvivano ad un docker rm, è necessario l'uso dei "volumes".