Docker
Gestione dei contenitori
Ricerca…
Sintassi
- docker rm [OPZIONI] CONTENITORE [CONTENITORE ...]
- docker allegare [OPZIONI] CONTENITORE
- docker exec [OPZIONI] CONTAINER COMMAND [ARG ...]
- docker ps [OPZIONI]
- log del docker [OPZIONI] CONTENITORE
- finestra mobile ispeziona [OPZIONI] CONTENITORE | IMMAGINE [CONTENITORE | IMMAGINE ...]
Osservazioni
- Negli esempi precedenti, ogni volta che container è un parametro del comando docker, viene indicato come
<container>
ocontainer id
o<CONTAINER_NAME>
. In tutti questi posti è possibile passare un nome contenitore o un id contenitore per specificare un contenitore.
Elenco dei contenitori
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
da sola stampa solo i contenitori attualmente in esecuzione. Per visualizzare tutti i contenitori (compresi quelli fermati), usa il flag -a
:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Per elencare i contenitori con uno stato specifico, utilizzare l'opzione della riga di comando -f
per filtrare i risultati. Ecco un esempio di elenco di tutti i contenitori che sono usciti:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
È anche possibile elencare solo gli ID contenitore con l' -q
. Questo rende molto facile operare sul risultato con altre utility Unix (come grep
e awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Quando si avvia un container con la docker run --name mycontainer1
si specifica un nome specifico e non un nome casuale (nella forma mood_famous, come nostalgic_stallman), e può essere facile trovarli con tale comando
docker ps -f name=mycontainer1
Contenitori di riferimento
I comandi Docker che prendono il nome di un contenitore accettano tre diverse forme:
genere | Esempio |
---|---|
UUID completo | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
UUID breve | 9cc69f11a0f7 |
Nome | berserk_wozniak |
Utilizzare la docker ps
per visualizzare questi valori per i contenitori sul proprio sistema.
L'UUID è generato da Docker e non può essere modificato. È possibile fornire un nome al contenitore quando lo si avvia docker run --name <given name> <image>
. Docker genererà un nome casuale nel contenitore se non ne specifichi uno al momento dell'avvio del contenitore.
NOTA : il valore dell'UUID (o un UUID "breve") può essere di qualsiasi lunghezza purché il valore specificato sia univoco per un contenitore
Avvio e arresto dei contenitori
Per fermare un container in esecuzione:
docker stop <container> [<container>...]
Questo invierà il processo principale nel contenitore a SIGTERM, seguito da un SIGKILL se non si interrompe entro il periodo di prova. Il nome di ciascun contenitore viene stampato mentre si arresta.
Per avviare un contenitore interrotto:
docker start <container> [<container>...]
Questo avvierà ogni contenitore passato in background; il nome di ciascun contenitore viene stampato non appena inizia. Per avviare il contenitore in primo piano, passare il flag -a
( --attach
).
Elenca contenitori con formato personalizzato
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Trovare un contenitore specifico
docker ps --filter name=myapp_1
Trova IP del contenitore
Per scoprire l'indirizzo IP del tuo contenitore, usa:
docker inspect <container id> | grep IPAddress
oppure utilizzare la finestra mobile ispeziona
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Riavvio del contenitore della finestra mobile
docker restart <container> [<container>...]
Opzione - tempo : secondi per attendere l'arresto prima di uccidere il contenitore (impostazione predefinita 10)
docker restart <container> --time 10
Rimuovere, eliminare e pulire i contenitori
docker rm
può essere usato per rimuovere contenitori specifici come questo:
docker rm <container name or id>
Per rimuovere tutti i contenitori puoi usare questa espressione:
docker rm $(docker ps -qa)
Per impostazione predefinita la finestra mobile non elimina un contenitore in esecuzione. Qualsiasi contenitore in esecuzione produrrà un messaggio di avviso e non verrà eliminato. Tutti gli altri contenitori saranno cancellati.
In alternativa puoi usare xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Dove la docker ps -aq -f status=exited
restituirà un elenco di ID contenitore di container con stato "Exited".
Attenzione: tutti gli esempi precedenti rimuoveranno solo i contenitori "fermati".
Per rimuovere un container, indipendentemente dal fatto che sia stato arrestato o meno, puoi utilizzare il flag force -f
:
docker rm -f <container name or id>
Per rimuovere tutti i contenitori, indipendentemente dallo stato:
docker rm -f $(docker ps -qa)
Se si desidera rimuovere solo i contenitori con stato dead
:
docker rm $(docker ps --all -q -f status=dead)
Se si desidera rimuovere solo i contenitori con uno stato exited
:
docker rm $(docker ps --all -q -f status=exited)
Queste sono tutte permutazioni dei filtri utilizzati quando si elencano i contenitori .
Per rimuovere sia i contenitori indesiderati che le immagini che pendono dallo spazio dopo la versione 1.3 , utilizzare quanto segue (simile allo strumento Unix df
):
$ docker system df
Per rimuovere tutti i dati inutilizzati:
$ docker system prune
Esegui il comando su un contenitore finestra mobile già esistente
docker exec -it <container id> /bin/bash
È normale accedere a un contenitore già in esecuzione per effettuare alcuni test rapidi o vedere cosa sta facendo l'applicazione. Spesso denota cattive pratiche di utilizzo del contenitore dovute ai log e i file modificati dovrebbero essere collocati in volumi. Questo esempio ci consente di accedere al contenitore. Ciò suppone che / bin / bash sia disponibile nel contenitore, che possa essere / bin / sh o qualcos'altro.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Questo esempio archivia il contenuto della directory dei dati in un tar. Quindi con docker cp
puoi recuperarlo.
Log del contenitore
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Per esempio:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Connettersi a un'istanza in esecuzione come daemon
Ci sono due modi per farlo, il primo e il più conosciuto è il seguente:
docker attach --sig-proxy=false <container>
Questo letteralmente attacca il tuo bash alla bash del contenitore, il che significa che se hai uno script in esecuzione, vedrai il risultato.
Per staccare, basta digitare: Ctl-P Ctl-Q
Ma se hai bisogno di un modo più amichevole e di essere in grado di creare nuove istanze di bash, basta eseguire il seguente comando:
docker exec -it <container> bash
Copia di file da / a contenitori
dal contenitore all'host
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
dall'host al contenitore
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Se uso jess / trasmissione da
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, i file nel contenitore sono in / transmission / download
e la mia directory corrente sull'host è / home / $ USER / abc, dopo
docker cp transmission_id_or_name:/transmission/download .
Farò copiare i file in
/home/$USER/abc/transmission/download
non è possibile, utilizzando la docker cp
copiare solo un file, copiare l'albero della directory e i file
Rimuovere, eliminare e pulire i volumi della finestra mobile
I volumi Docker non vengono rimossi automaticamente quando un container viene fermato. Per rimuovere i volumi associati quando si interrompe un contenitore:
docker rm -v <container id or name>
Se non viene specificato il flag -v
, il volume rimane su disco come "volume sospeso". Per eliminare tutti i volumi che pendono:
docker volume rm $(docker volume ls -qf dangling=true)
Il docker volume ls -qf dangling=true
filter restituirà un elenco di nomi di volumi di finestra mobile, inclusi quelli senza tag, che non sono collegati a un contenitore.
In alternativa, puoi usare xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Esportare e importare i filesystem del contenitore Docker
È possibile salvare il contenuto del file system di un contenitore Docker in un file di archivio tarball. Ciò è utile in un pizzico per spostare i filesystem del contenitore su diversi host, ad esempio se un contenitore di database ha modifiche importanti e non è altrimenti possibile replicare tali modifiche altrove. Si noti che è preferibile creare un contenitore completamente nuovo da un'immagine aggiornata utilizzando un comando di docker run
docker-compose.yml
o docker-compose.yml
file docker-compose.yml
, invece di esportare e spostare il filesystem di un contenitore. Parte del potere di Docker è l'auditabilità e la responsabilità del suo stile dichiarativo di creazione di immagini e contenitori. Utilizzando docker export
e docker import
, questo potere è sottomesso a causa della offuscamento delle modifiche apportate all'interno del filesystem di un contenitore dal suo stato originale.
docker export -o redis.tar redis
Il comando precedente creerà un'immagine vuota e quindi esporterà il filesystem del contenitore redis
in questa immagine vuota. Per importare da un archivio tarball, usa:
docker import ./redis.tar redis-imported:3.0.7
Questo comando creerà l'immagine redis-imported:3.0.7
, da cui è possibile creare contenitori. È anche possibile creare modifiche all'importazione e impostare un messaggio di commit:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Le direttive Dockerfile disponibili per l'uso con l' -c
opzione della riga di comando sono CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.