Creare un nuovo container
Il modo più veloce per creare e far partire immediatamente un container è usare il comando run:
docker container run {opt} {image}:{tag} {app}
Ovviamente va indicata la immagine da cui partire e il comando / applicazione da eseguire. Usare l'opzione -it collegherà la shell del terminal da cui viene lanciata la run con la shell del container.
Il container resterà in esecuzione fino a quando la app lo resterà a sua volta. Terminata la app, anche il container si fermerà.
Per esempio questo comando creerà un container ubuntu che resterà operativo per 10 secondi prima di fermarsi:
docker container run ubuntu sleep 10
Una volta passati i 10 secondi il container si fermerà. Potrà essere fatto ripartire usando il comandato docker container run e di nuovo resterà operativo per 10 secondi prima di fermarsi. Creaiamo un container e colleghiamoci alla sua shell (esempio per host Linux):
docker container run -it ubuntu /bin/bash
Il prompt ottenuto sarà del tipo root@{serie alfanumerica}:/#
La serie alfanumerica è composta dai primi 12 caratteri dell'ID del container. Usando il comando ps -edaf, per visualizzare l'elenco dei processi in esecuzioni, ne troveremo solo 2:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:15 pts/0 00:00:00 /bin/bash
root 9 1 0 11:18 pts/0 00:00:00 ps -edaf
Il primo è la shell che abbiamo detto di lanciare con la creazione del container. Il secondo è il comando ps stesso, che però è già terminato, dopo aver restituito il risultato. Quindi il nostro container contiene solo un processo in esecuzione, è per quello che terminando la shell, quindi terminando quell'unico processo, il container si ferma. Un container non può restare in esecuzione senza che ci sia almeno un processo in attivo.
Proviamo ad uscire dalla shell, senza killarla, usando ctrl+pq. Poi ricolleghiamoci di nuovo al container, che è rimasto in esecuzione (usiamo docker container ls per capirne l'ID):
docker container exec -it {ID} /bin/bash
Eseguendo di nuovo ps -edaf ora troveremo 3 processi, la shell di prima, quella nuova e il solito processo ps che è ormai chiuso al momento di vedere il risultato:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:15 pts/0 00:00:00 /bin/bash
root 10 0 0 11:25 pts/1 00:00:00 /bin/bash
root 18 10 0 11:25 pts/1 00:00:00 ps -edaf
Se anche uscissimo ora con exit, il container resterebbe in esecuzione poichè abbiamo killato solo la seconda shell, la prima sarebbe ancora in esecuzione. Possiamo fermare il container con stop e cancellarlo con rm:
docker container stop {ID}
docker container rm {ID}