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

Mettere una lente d'ingrandimento su Docker con Docker Inspect

Se stai cercando una vista dettagliata di tutti i componenti principali di Docker da immagini Docker, contenitori e così via, il comando Docker inspect fa per te.

In questo tutorial imparerai come diventare un investigatore per scoprire informazioni dettagliate su molti componenti Docker per il debug, la risoluzione dei problemi o solo la tua semplice curiosità.

Cominciamo!

Prerequisiti

Se desideri seguire passo dopo passo, assicurati di avere quanto segue:

  • Docker:questo tutorial utilizza Docker v19.03.11 su Ubuntu 18.04.5 LTS.
  • Qualsiasi immagine Docker scaricata e disponibile. Questo tutorial utilizza l'ultima immagine Docker NGINX disponibile su Docker Hub.
  • Almeno un container in esecuzione sull'host Docker.

Ispezione delle immagini Docker con Docker Inspect

Docker Inspect può fornire informazioni su molti diversi componenti Docker, ma iniziamo prima con uno dei componenti più popolari; immagini. Se hai scaricato un'immagine, come controlli le informazioni su quell'immagine? Scopriamolo.

Supponendo che tu abbia almeno un'immagine sul tuo host Docker, usa inspect comando per interrogare quell'immagine. Il comando seguente presuppone che tu abbia un'immagine chiamata nginx sul tuo host.

docker image inspect nginx

Una volta eseguito, il comando sopra restituisce una serie di informazioni tramite JSON su quella particolare immagine. Alcuni attributi degni di nota sono:

  1. Il tag immagine.
  2. L'ora in cui è stata creata l'immagine.
  3. Il nome host del contenitore associato con l'immagine Docker nginx.
  4. La rete porta il container a disposizione della rete esterna.
  5. Noterai anche i volumi allegati al contenitore che appartiene all'immagine Docker nginx.

Ottenere informazioni dettagliate sulle reti Docker

La docker inspect il comando non è solo relegato all'acquisizione di informazioni su immagini e contenitori; può anche interrogare le reti. Le reti Docker consentono ai container di comunicare in diversi modi, ad esempio attraverso una rete bridge (una rete privata), una rete host (una rete pubblica) o una rete overlay.

Conoscere le reti Docker è importante in quanto consente di passare a un'altra rete Docker in qualsiasi momento secondo la necessità dell'applicazione disconnettendosi e quindi riconnettendosi.

Supponendo che tu sia ancora sul terminale:

1. Esegui il comando seguente. La docker network ls comando elenca tutte le reti presenti nella finestra mobile. Avrai bisogno dell'output di questo comando per trovare l'ID della rete.

docker network ls

Successivamente, passa un ID di rete alla docker inspect network comando. Questo comando restituisce varie informazioni sulla rete particolare, come mostrato di seguito.

docker inspect network 4748f122c987

1. Il tipo di rete.

2. L'indirizzo di sottorete utilizzato dalla rete.

3 e 4. Informazioni di riepilogo su ogni container che utilizza questa particolare rete.

Capire i modelli di Docker's Go e il Format Parametro

Finora, hai imparato come utilizzare il comando di ispezione Docker senza utilizzare parametri di opzioni aggiuntivi. Ma se hai bisogno di manipolare il formato di output, considera l'utilizzo del --format bandiera. Il --format utilizza i modelli Go per filtrare e visualizzare le informazioni restituite da docker inspect .

Insieme al flag di formato vengono utilizzate varie funzioni, come join, println, table, ecc. Discutiamone alcune!

Ad esempio, potresti voler unire alcuni valori dall'output di un particolare contenitore. In tal caso, il join il comando funziona bene. Di seguito, vedrai che il join comando concatena le stringhe insieme (nginx, -g, daemon off ) con ogni elemento separato da un separatore (, ).

docker inspect --format '{{join .Args " , "}}' container_id

Forse vorresti capitalizzare un valore? Usa il upper comando.

docker inspect --format "{{upper .Name}}" container_id

Puoi trovare molti esempi diversi di utilizzo del format parametro.

Trovare il nome dell'immagine di base di un container Docker

Nella sezione precedente, hai visto come ottenere una visualizzazione dettagliata di tutte le tue immagini Docker, inclusi i contenitori che utilizzano tali immagini. Ma cosa succede se conosci già un ID contenitore e devi trovare rapidamente l'immagine da cui è stato creato? Puoi fornire l'ID del contenitore a docker inspect .

Per trovare il nome dell'immagine da cui è stato creato un particolare contenitore, esegui docker inspect di seguito comando. Il comando seguente passa l'ID contenitore (8f34d039fa3a in questo caso) per docker inspect e usa il format parametro per restituire solo l'image valore dalla Config nodo nell'output JSON.

# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a

Puoi vedere l'intero Config il nodo appare come sotto e dove si trova l'Image il nome deriva da.

Trovare l'indirizzo IP, l'indirizzo Mac e i collegamenti delle porte di un container

Anche se ora sai come trovare la rete utilizzata da un container, come fai a sapere quale indirizzo IP o indirizzo Mac e Port Binding su quella rete utilizza un container? Hai indovinato! docker inspect .

Per restringere l'indirizzo IP utilizzato da un container, passa l'ID container a docker inspect comando. Ancora una volta, usa il format parametro per filtrare il JSON indesiderato per ottenere esattamente ciò che stai cercando.

Vedrai il format parametro parametro di seguito dice a docker inspect solo per restituire il valore incorporato all'interno di NetworkSettingsNetworksIPAddress Attributo JSON che utilizza l'range attributo. L'attributo Range ti consente di scorrere un array, impostando il . valore a ciascun elemento dell'array.

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

Vedrai le NetworkSettings principali nodo sottostante e dove si trova il IPAddress il valore è nidificato.

Allo stesso modo, per trovare l'indirizzo MAC del contenitore, usa docker inspect comando contenitore come mostrato di seguito.

Di nuovo, vedrai che il format parametro parametro di seguito utilizza l'range attributo ma questa volta trova l'indirizzo Mac del contenitore controllando NetworkSettingsNetworksMac address .

docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249

Infine, per controllare tutti i collegamenti di porta di un container esegui il seguente docker inspect comando. Vedrai il format parametro parametro di seguito utilizza l'range attributo per trovare i collegamenti delle porte del contenitore controllando NetworkSettingsHostPort .

Qualcuno dovrebbe conoscere i collegamenti delle porte perché se una porta è già utilizzata, non dovrebbe essere utilizzata di nuovo; in caso contrario, genererà un messaggio di errore che indica che la porta è già allocata.

docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a

Ottenere una vista dettagliata del volume Docker utilizzando Docker Inspect

Finora, hai imparato come trovare informazioni dettagliate su immagini, contenitori e rete, ma non hai imparato lo storage. Cambiamo le cose.

Per assicurarci che il tutorial abbia almeno un volume montato collegato a un container, creiamo prima un container e montiamo un volume di archiviazione.

Se hai già un volume di archiviazione montato su un container, puoi saltare questa parte.

Il comando seguente crea un nuovo contenitore Docker chiamato my_container , espone la porta 80 all'host (-p 80:80 ), monta un volume in base alla /var/container_dir dell'host directory chiamata mount_val (-v mounted_vol:/var/container_dir ) utilizzando nginx immagine.

docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx

Ora che hai un volume montato su un contenitore, fornisci il nome del volume a docker volume inspect . Si noti di seguito che il comando restituisce l'output JSON, fornendo solo informazioni sul volume di archiviazione montato.

docker volume inspect mounted_vol

Conclusione

Ora dovresti essere in grado di utilizzare docker inspect comando in molte situazioni diverse, dall'interrogazione di informazioni su immagini, contenitori, rete e archiviazione.

Come prevedi di utilizzare docker inspect per richiedere informazioni sul tuo ambiente Docker?


Docker
  1. Installa ModSecurity con Apache in un Docker Container

  2. Installa il server VPN Wireguard con Docker

  3. Configura Nextcloud con Redis usando Docker

  4. Come installare Jenkins con Docker

  5. Come utilizzare il comando Ispeziona Docker

Come configurare MySQL con Docker in Linux

Da Docker Compose a Kubernetes con Podman

Come sostituire Docker con Podman su un Mac

Distribuzione di uno stack EFK con Docker

Come ottenere l'indirizzo IP del contenitore Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker