GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come eseguire i contenitori Docker

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 Prakash

Cosa 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 Prakash

Come 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.


Docker
  1. Come eseguire MySQL in un contenitore Docker

  2. Come elencare i contenitori Docker

  3. Introduzione ai contenitori Docker

  4. Come installare, eseguire ed eliminare applicazioni all'interno dei contenitori Docker – Parte 2

  5. Come installare Docker ed eseguire Docker Container in Ubuntu

Come eseguire Grafana in un contenitore Docker

Come eseguire SSH nei contenitori Docker [Passo dopo passo]

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come gestire i container Docker