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

Docker Exec:il tuo comando Goto per l'esecuzione di comandi in Docker

Hai mai avuto bisogno di vedere cosa sta succedendo all'interno di un container Docker? I contenitori devono essere idempotenti:in caso di problemi, ridistribuire un nuovo contenitore. Spesso la vita non è così semplice. È necessario eseguire i comandi nel contenitore per identificare il problema. Qui è dove il docker exec il comando può aiutare.

Questo articolo ti insegnerà come eseguire comandi su un contenitore Docker in esecuzione utilizzando docker exec comando.

Prerequisiti

Per seguire gli esempi in questo articolo, dovrai attenerti a quanto segue.

  • Qualsiasi versione recente di Docker Desktop funzionerà su Windows, Linux o macOS. Questo tutorial utilizza la v3.1.0 in esecuzione su Windows 10.

Avvio di un container NGINX

Docker exec esegue i comandi nei contenitori. Ma, per farlo, devi prima avere un container in cui eseguire quei comandi. Iniziamo scaricando un'immagine Docker e creando un container demo.

  1. Crea una nuova directory, questo tutorial usa C:\gitrepos\test , per contenere i file utilizzati per il contenitore.

2. Creare un file, denominato dockerfile (senza estensione), contenente il codice seguente. Il Dockerfile definisce i passaggi necessari per creare un contenitore.

FROM nginx:alpine
 COPY index.html /usr/share/nginx/html/index.html

3. Quindi, crea un file, nella stessa directory, chiamato index.html che contiene il seguente codice. Questo è un file HTML che, all'avvio del contenitore, visualizzerà un messaggio Hello World.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Hello World - Nginx Docker</title> 
    <style> 
       h1{ font-weight:lighter; font-family: Arial, Helvetica, sans-serif; 
       } 
    </style> 
    </head> 
    <body> 
       <h1> 
          Hello World 
       </h1> 

    </body> 
    </html>

4. Ora crea il contenitore Nginx Docker. Poiché il Dockerfile si trova nella directory di lavoro corrente, specifica . per far sapere al motore Docker di guardare lì. Inoltre, assicurati di taggare il contenitore con my-ngnix usando il t parametro per garantire una più facile consultazione in futuro.

docker build -t my-nginx .

5. Ora che il contenitore è stato creato, avvia il contenitore con il comando Docker run.

# rm - Informs Docker to delete the container after it has stopped 
# d - Return control of the command-line after the command has been executed 
# p - Map the internal container port 80 to an external port 80 docker run --rm -d -p 80:80 my-nginx

6. Infine, apri il tuo browser web e vai a http://localhost/ per vedere quanto segue.

Esecuzione di comandi con Docker Exec

Quando si eseguono comandi in un contenitore Docker, potrebbe essere necessario eseguire un comando in modo interattivo. Eseguire comandi in modo interattivo significa digitare un comando, ricevere feedback, digitare un altro comando, ecc. I comandi interattivi prendono il controllo della tua sessione e ti impediscono di fare qualsiasi altra cosa.

Ma cosa succede se si conoscono già i comandi da inviare al container in anticipo e si desidera eseguire comandi in background? In tal caso, puoi eseguire comandi non interattivi. I comandi non interattivi ti consentono di inviare un comando a Docker e di restituire immediatamente il controllo della console.

Individuazione del nome e dell'ID del contenitore

Ora che hai creato il contenitore, puoi eseguire i comandi all'interno del contenitore. Prima di eseguire un comando, individua il nome o l'ID del contenitore NGINX. Il nome o l'ID funzioneranno nei comandi Docker. Con questo in mente, ricordare l'ID potrebbe essere più difficile del nome!

Per visualizzare qualsiasi informazione sul contenitore in esecuzione, esegui la finestra mobile ps comando per produrre le seguenti informazioni.

docker ps

Copia l'ID univoco, e17e4b6be01a o il nome generato casualmente mystifying_chandrasekhar negli appunti per un uso successivo.

Esecuzione di un comando non interattivo con Docker Exec

Come esempio di esecuzione di un comando non interattivo, copia ed esegui il comando seguente per restituire un elenco di file in /var/log directory con ls -l comando. Passa tutto dopo il nome del contenitore, mystifying_chandrasekhar , nella finestra mobile exec comando.

docker exec mystifying_chandrasekhar ls -l /var/log

Evitare l'output della console con i comandi Docker

Restituendo istantaneamente il controllo della shell all'utente, le operazioni di grandi dimensioni evitano di vincolare la console. Rinuncia all'output della console con il d separato opzione. Il comando seguente crea il file /tmp/execWorks tramite il touch comando all'interno del contenitore e non visualizza alcun output sulla console.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

Esecuzione di comandi interattivi con Docker Exec

Fino a questo punto, hai imparato come eseguire comandi non interattivi in ​​un contenitore Docker con docker exec . Tuttavia, potresti dover affrontare un momento in cui devi risolvere i problemi di un contenitore, ad esempio, quando devi inviare comandi al contenitore in modo interattivo. In tal caso, devi eseguire i comandi in modo interattivo.

Esecuzione di comandi in modo interattivo con docker exec richiede due opzioni, i e t . Il i l'opzione mantiene aperto STDIN, consentendo l'invio di comandi al contenitore e il t l'opzione assegna uno pseudo-TTY (PTY), un canale di comunicazione, per digitare i comandi.

Copia e incolla il comando seguente per aprire un prompt dei comandi interattivo nel contenitore Docker in esecuzione con la shell Bourne (sh), come indicato dalla modifica del prompt in / # .

docker exec -it mystifying_chandrasekhar sh

Una volta nella shell, ora esegui i comandi seguenti per dimostrare l'elenco dei file dall'interno del contenitore. Infine, eseguendo exit comando per uscire dalla shell interattiva.

ls -l /var/log
exit

Per aprire un prompt interattivo in una directory specifica, passare il percorso a w opzione che dice a Docker di avviare la shell in una directory specificata.

Trasferimento di variabili ambientali a un container funzionante

Molti programmi utilizzano variabili di ambiente per impostare le configurazioni all'avvio. Ad esempio, la maggior parte delle applicazioni Java richiedono il JAVA_HOME variabile ambientale da impostare sul percorso Java.

Puoi passare variabili d'ambiente a una sessione usando e opzione. Ad esempio, forse è necessario popolare una variabile di ambiente chiamata MYVAR in un contenitore funzionante. Per farlo, usa la e opzione e fornisci la coppia chiave/valore di MYVAR="<some value>" come mostrato di seguito.

docker exec -it -e MYVAR="hello" mystifying_chandrasekhar sh
echo $MYVAR

Trasferimento di variabili d'ambiente con un file

Se si dispone di molte variabili ambientali o di una configurazione condivisa, la memorizzazione di tali variabili in un file potrebbe essere più semplice. Passa il file tramite un percorso relativo o assoluto a Docker con il --env-file opzione. Questa tecnica viene spesso utilizzata per fornire credenziali sicure a un container. Assicurati di non eseguire mai il commit delle credenziali per il controllo della versione!

Crea un file di testo chiamato env-vars.txt con le variabili ambientali da passare e i loro valori. Questo file può essere chiamato come preferisci e non ha bisogno del .txt estensione del file.

Passa le variabili ambientali a Docker con il env-file opzione. Verifica che le variabili siano disponibili con echo comando come mostrato nello screenshot qui sotto.

# Pass the env-vars.txt file and open an interactive prompt
docker exec -it --env-file env-vars.txt mystifying_chandrasekhar sh
# Verify that the environmental variables are available in the Docker container
echo $MYVAR
echo $FOO
echo $SOMETHING

Interazione con un container in esecuzione come utente diverso

In produzione, le applicazioni spesso vengono eseguite come un utente specifico per limitarne l'accesso. Se esegui applicazioni come utente specifico in produzione, dovresti farlo anche durante il test dei comandi.

In questo esempio, il contenitore Docker viene eseguito come nginx utente. Passa l'utente al w opzione per dire a Docker di avviare il contenitore come nginx account. Il whoami comando, eseguito dall'interno del contenitore, conferma che il nginx utente è effettivamente utilizzato.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami

Passaggi successivi

Hai imparato come eseguire comandi all'interno di un contenitore in esecuzione utilizzando docker exec comando. Utilizzando il exec comando per entrare e interrogare i container in esecuzione, hai un nuovo potente strumento nel tuo arsenale per risolvere i problemi dei container Docker.

Ora prova a fare un ulteriore passo avanti e usa il controllo della versione Git per inserire un sito Web statico nel contenitore, anziché copiare un singolo file. Se Git è nuovo per te, l'articolo Guida per principianti a Visual Studio Code e Git è un ottimo punto di partenza.


Docker
  1. Alcuni comandi DOCKER

  2. Foglio di riferimento rapido per i comandi Docker

  3. Creazione del primo contenitore di Windows Server Docker

  4. Come modificare il fuso orario per un container Docker

  5. Comprensione dell'output del comando "statistiche docker".

Come copiare file con Docker cp nel tuo Docker Container

21 comandi essenziali che ogni utente Docker dovrebbe conoscere

Comandi Docker per la gestione del ciclo di vita dei container (Guida definitiva)

ctop – Interfaccia simile a quella superiore per il monitoraggio dei contenitori Docker

40 importanti comandi Docker per gli sviluppatori di software

Metti un timer sui tuoi comandi in esecuzione con il comando di timeout in Linux