15 comandi Docker per gestire i contenitori [Elenco, Interrompi, Avvia, Rimuovi e altro]

Pubblicato: 2021-08-17

Docker è uno strumento popolare per creare ed eseguire applicazioni containerizzate. È disponibile per più piattaforme e utilizzata come una delle tecnologie di container back-end in Kubernetes.

In Docker puoi creare le tue immagini per eseguire la tua applicazione come contenitore oppure puoi estrarre e utilizzare migliaia di immagini pubbliche dal repository Docker e usarle nel tuo progetto. Una volta che l'immagine è pronta, puoi avviare i tuoi contenitori utilizzando quelle immagini. Un container è un'istanza in esecuzione di un'immagine Docker.

La gestione dei container Docker è uno degli aspetti più importanti di cui occuparsi come amministratore di sistema che gestisce host/container Docker.

In questo articolo, ci concentreremo sulla gestione dei contenitori utilizzando il comando Docker.

eseguire Comando

Il comando docker run viene utilizzato per eseguire un contenitore da un'immagine specificando l' Image ID o il nome del Repository e/o Tag .

 $ docker run {image}

Esempio:

 $ docker run nginx

Il comando precedente esegue un'istanza dell'applicazione <span class="NormalTextRun SpellingErrorV2 SCXW251451022 BCX0">nginx</span> su un host Docker, se esiste già. Se non esiste nell'host Docker, va all'hub Docker (per impostazione predefinita) e trascina l'immagine verso il basso. Ma questo viene fatto l'unica prima volta. Per le volte successive viene riutilizzata la stessa immagine.

Se vuoi eseguire una particolare versione di un'immagine, specifica la sua versione separata da due punti. Questo è noto come Tag . Nel caso in cui non specifichi alcun tag, Docker lo considererà per impostazione predefinita come l'ultimo.

Inoltre, se vuoi eseguire il contenitore in background in una modalità separata in modo da tornare al prompt dopo che Docker ha avviato il contenitore, usa -d flag.

Esempio:

 $ docker run nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 33847f680f63: Pull complete dbb907d5159d: Pull complete 8a268f30c42a: Pull complete b10cf527a02d: Pull complete c90b090c213b: Pull complete 1f41b2f2bf94: Pull complete Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90 Status: Downloaded newer image for nginx:latest /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:13:23 [notice] 1#1: using the "epoll" event method 2021/08/15 12:13:23 [notice] 1#1: nginx/1.21.1 2021/08/15 12:13:23 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:13:23 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:13:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:13:23 [notice] 1#1: start worker processes 2021/08/15 12:13:23 [notice] 1#1: start worker process 33 2021/08/15 12:13:23 [notice] 1#1: start worker process 34

ps Comando

Il comando docker ps elenca tutti i contenitori in esecuzione e alcune informazioni di base su di essi. Come l'ID del contenitore, il nome dell'immagine, il contenitore dell'ora in cui viene creato, lo stato corrente e il nome del contenitore. Ogni contenitore ottiene un nome casuale (se non specificato in modo esplicito) e un ID.

Esempio:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp jolly_elion

Per elencare tutti i contenitori in esecuzione e non in esecuzione/usciti contemporaneamente, è possibile utilizzare:

 $ docker ps -a

Esempio:

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcec129f0eb4 nginx "/docker-entrypoint.…" 46 hours ago Exited (0) 46 hours ago interesting_ishizaka 6e8b1e441aa6 hello-world "/hello" 2 days ago Exited (0) 2 days ago keen_shirley

ls comando

Come il comando ps , anche ls può essere utilizzato per elencare i contenitori. -a flag può essere utilizzato per elencare tutti i contenitori (non solo quelli in esecuzione).

 $ docker container ls

Esempio:

 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15796e91c30b redis "docker-entrypoint.s…" 2 seconds ago Up 1 second 6379/tcp flamboyant_neumann 904390b65d45 nginx "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 80/tcp nginx_new $

fermare il comando

Il comando docker stop viene utilizzato per arrestare un contenitore in esecuzione. Qui dobbiamo inserire il nome o l'ID del contenitore insieme a questo.

 $ docker stop {container-id}

In caso di successo, restituirà il nome o l'ID della finestra mobile.

Esempio:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 50 seconds ago Up 49 seconds 80/tcp jolly_elion

Questo restituirà l' CONTAINER ID che puoi usare per fermare il contenitore.

 $ docker stop 133f5 133f5

Per questo esempio e per quelli successivi, tieni presente che non è necessario specificare un valore completo di CONTAINER ID . Accetterà fino alla parte, il che lo rende unico tra gli altri contenitori in esecuzione poiché Docker sa quale contenitore fermare.

Comando rm

Il comando docker rm rimuove un container interrotto o terminato.

 $ docker rm {CONTAINER NAME or ID}

Esempio:

 $ docker rm 133f5 133f5 $

comando esecu

Possiamo usare il comando exec per entrare in un contenitore in esecuzione. Ciò è utile per eseguire il debug di contenitori in esecuzione o eseguire alcune operazioni all'interno di un contenitore.

 $ docker exec –it {container} {command}

Esempio:

Supponiamo di voler avviare la shell bash (supponendo che l'immagine abbia Bash disponibile, puoi usare anche altre shell disponibili) all'interno di un contenitore chiamato unruffled_meninsky in modalità interattiva, usa:

 $ docker exec –it unruffled_meninsky /bin/bash

Questo dovrebbe farti atterrare all'interno del contenitore su un guscio bash . Qui il flag -i sta per modalità interattiva e -t per il terminale. Se desideri semplicemente eseguire uno o più comandi ed uscire dal contenitore, puoi utilizzare:

 $ docker exec unruffled_meninsky cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 cd2eed4acf34

comando logs

Nel caso in cui un container venga avviato in modalità distaccata e desideriamo vederne i registri, possiamo utilizzare il comando logs per rivedere i suoi registri:

 $ docker logs {CONTAINER NAME or ID}

Esempio:

 $ docker logs 7da6dcebaf9c /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:14:09 [notice] 1#1: using the "epoll" event method 2021/08/15 12:14:09 [notice] 1#1: nginx/1.21.1 2021/08/15 12:14:09 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:14:09 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:14:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:14:09 [notice] 1#1: start worker processes 2021/08/15 12:14:09 [notice] 1#1: start worker process 31 2021/08/15 12:14:09 [notice] 1#1: start worker process 32 $

comando cp

Per copiare file tra un container e il filesystem localhost, puoi usare il comando cp .

 $ docker container cp {CONTAINER NAME or ID:SRC_PATH} {DEST_PATH}|-

Esempio:

 $ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp

comando di esportazione

Il comando Docker container offre un'opzione per esportare il filesystem di un container come file TAR.

 $ docker container export {CONTAINER NAME or ID}

ispezionare il comando

Possiamo controllare le informazioni dettagliate su un container usando il comando inspect come:

 $ docker inspect {CONTAINER NAME or ID}

O

$ docker container inspect {CONTAINER NAME or ID}

uccidi il comando

Un container in esecuzione può essere terminato utilizzando il comando kill con un flag --signal o -s opzionale. È possibile specificare più contenitori per ucciderli in una volta sola.

 $ docker kill {CONTAINER NAME or ID} [--signal VAL]

Esempio:

 $ docker kill cd9005a0b5d2 -s 9 cd9005a0b5d2 $

stats Comando

Per visualizzare un live streaming dell'utilizzo delle risorse di un container, puoi utilizzare il comando stats :

 $ docker container stats {CONTAINER NAME or ID}

Esempio:

 $ docker container stats thirsty_volhard CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3

comando in alto

Come il comando top in Linux, possiamo usarlo con Docker per ottenere un elenco di processi in esecuzione.

 $ docker container top {CONTAINER NAME or ID}

Esempio:

 $ docker container top thirsty_volhard UID PID PPID C STIME TTY TIME CMD root 2603 2582 0 12:34 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 2659 2603 0 12:34 ? 00:00:00 nginx: worker process systemd+ 2660 2603 0 12:34 ? 00:00:00 nginx: worker process $

rinomina Comando

Per rinominare un contenitore esistente, utilizzare il comando rename .

 $ docker container rename {OLD CONTAINER NAME} {NEW CONTAINER NAME}

Esempio:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_container $ docker container rename nginx_container nginx_new $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_new $

comando diff

Possiamo ispezionare le modifiche ai file o alle directory sul filesystem di un contenitore con il comando diff .

 $ docker container diff {CONTAINER NAME or ID}

Esempio:

 $ docker container diff nginx_new C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/uwsgi_temp A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp C /etc C /etc/nginx C /etc/nginx/conf.d C /etc/nginx/conf.d/default.conf C /run A /run/nginx.pid $

Riepilogo

Per concludere, Doker offre un'ampia serie di comandi per gestire i container dalla loro creazione alla distruzione. Abbiamo trattato alcuni dei comandi importanti e il loro utilizzo in questo articolo che dovrebbe darti una buona idea sulla gestione dei contenitori docker.

Quindi, scopri alcune delle risorse per imparare DevOps.