Quindi, se non conosci Docker, potresti chiederti come eseguire un container Docker. Lascia che te lo mostri rapidamente.
Puoi creare ed eseguire un container con il seguente comando:
docker run -it -d --name container_name image_name bash
E poi, se vuoi entrare nel container (per eseguire i comandi all'interno del container in modo interattivo), puoi usare il comando docker exec:
docker exec -it container_ID_or_name /bin/bash
Ecco un esempio in cui creo un nuovo contenitore con Ubuntu come immagine di base, quindi entro nel contenitore Ubuntu in esecuzione ed eseguo il comando ls:
[email protected]:~$ docker run -it -d --name my_container ubuntu bash
7e77640bca686108ad415318278a1fa148e1c84d3b180276e19ec2b970ba9b67
[email protected]:~$ docker exec -it my_container bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Perso? Non preoccuparti. Spiegherò in dettaglio cosa fanno i due comandi precedenti e cos'è il -it
opzione nel comando docker run ed exec.
Come eseguire il container docker
Se desideri eseguire un contenitore mobile con una determinata immagine e un comando specifico, puoi farlo in questo modo:
docker run -it -d --name container_name image_name bash
Il comando precedente creerà un nuovo contenitore con il nome specificato dall'immagine Docker specificata. Il nome del contenitore è facoltativo.
- L'opzione -i significa che sarà in modalità interattiva (puoi inserire comandi ad esso)
- L'opzione -t ti dà un terminale (in modo che tu possa usarlo come se usassi ssh per entrare nel container).
- L'opzione -d (modalità demone) mantiene il contenitore in esecuzione in background.
- bash è il comando che esegue.
Il motivo per eseguire bash come comando qui è che il contenitore non si fermerà immediatamente.
[email protected]:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 4 seconds ago Up 3 seconds determined_blackburn
Nell'esempio sopra, non ho nominato il contenitore, quindi è stato chiamato casualmente determinato_blackburn.
E come puoi vedere, il contenitore esegue il comando bash in background.
Docker Run vs Start vs Create:Differenza spiegata Per un principiante di Docker, termini come Docker Start, Docker Run e Docker Create potrebbero creare confusione. Questo articolo spiega la differenza con esempi. Manuale LinuxAbhishek PrakashCosa succede se non lo esegui come demone (opzione -d) in background?
Se non usi l'opzione -d, docker run creerà un nuovo contenitore e avrai un terminale in modalità interattiva che esegue la shell bash.
Come puoi vedere nell'esempio seguente, il contenitore viene creato e io sono automaticamente all'interno del contenitore (shell bash).
Il problema qui è che se esci dal container, il container si ferma.
[email protected]:~$ docker run -it ubuntu bash
[email protected]:/# echo this is a new container
this is a new container
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6098c44f2407 ubuntu "bash" 27 seconds ago Exited (0) 8 seconds ago bold_benz
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
Cosa succede se usi solo l'opzione -i (interattiva)?
Diciamo che usi solo l'opzione -i. In tal caso, vedrai un prompt interattivo ma se esci dal prompt interattivo (usando Ctrl+D o il comando esci), esci dal contenitore e il contenitore si ferma.
[email protected]:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 27 seconds ago Exited (0) 9 seconds ago loving_galileo
Cosa succede se usi solo l'opzione -t (terminal/tty)?
Questa è una situazione complicata perché in tal caso avrai uno pseudo terminale (se usi l'opzione -t) ma non avrai lo STDIN. In altre parole, non puoi inserire nulla, non puoi eseguire comandi all'interno del contenitore come hai fatto prima:
[email protected]:~$ docker run -t ubuntu bash
[email protected]:/# echo hello
^C^C
[email protected]:/# echo "hi"
^C^C
[email protected]:/# exit
^C^C
[email protected]:/#
Ho dovuto fermare il container da un altro terminal nel caso precedente.
Come uscire da un container DockerQuesto piccolo suggerimento per la finestra mobile mostra come uscire da un container Docker. Manuale LinuxAbhishek PrakashCome eseguire un container esistente
Il comando docker run crea un nuovo contenitore dall'immagine specificata. Ma cosa succede quando hai già un container?
Se vuoi eseguire un container esistente, devi prima avviare il container e poi puoi usare l'opzione exec in questo modo:
docker start existing_container_ID_or_name
docker exec -it existing_container_ID_or_name /bin/bash
Questo esempio sarà migliore per la tua comprensione:
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 7 minutes ago Exited (0) 7 minutes ago loving_galileo
[email protected]:~$ docker start b6b79a9f7789
b6b79a9f7789
[email protected]:~$ docker exec -it b6b79a9f7789 bash
[email protected]:/# echo "inside existing container"
inside existing container
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 8 minutes ago Up 43 seconds loving_galileo
Perché usare sempre bash?
In tutti gli esempi precedenti, ho usato bash o /bin/bash come comando che viene eseguito con il contenitore. L'ho usato perché fornisce una shell e quando esegui il contenitore, grazie alla shell, puoi eseguire comandi regolari all'interno del contenitore come se fossi all'interno di un normale sistema Linux.
Puoi chiedere al contenitore di eseguire qualsiasi comando, ma tieni presente che il contenitore esiste non appena il comando viene completato.
Come puoi vedere nell'esempio seguente, questa volta non c'è una sessione terminale interattiva. Non sei più "dentro" il contenitore perché il comando echo termina quasi immediatamente.
[email protected]:~$ docker exec -it b6b79a9f7789 echo hello
hello
[email protected]:~$
Puoi infatti eseguire anche altri comandi ed entrare successivamente nel contenitore.
Nell'esempio seguente, ho creato un nuovo contenitore che esegue il server nginx sulla porta 80. Dato che lo eseguo come demone con l'opzione -d, il contenitore nginx continua a funzionare.
E poi uso il comando docker exec per ottenere una shell bash interattiva e quindi entrare nel contenitore nginx (che è fondamentalmente un Linux preconfigurato con nginx).
[email protected]:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
262ca5b17bf8 nginx "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds 0.0.0.0:8000->80/tcp zen_kilby
b6b79a9f7789 ubuntu "bash" 20 minutes ago Up 12 minutes loving_galileo
[email protected]:~$ docker exec -it 262ca5b17bf8 bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Spero che tu abbia una migliore comprensione di come eseguire i contenitori docker e perché utilizza determinate opzioni.
Se hai domande o suggerimenti, fammi sapere nella sezione commenti.