GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Docker Exec:Váš příkaz Goto pro spouštění příkazů v Dockeru

Potřebovali jste někdy vidět, co se děje uvnitř kontejneru Docker? Kontejnery mají být idempotentní:Pokud dojde k problému, znovu nasaďte nový kontejner. Život často není tak jednoduchý. Chcete-li identifikovat problém, musíte v kontejneru spustit příkazy. Zde se nachází docker exec příkaz může pomoci.

Tento článek vás naučí spouštět příkazy na běžícím kontejneru Docker pomocí docker exec příkaz.

Předpoklady

Chcete-li se řídit příklady v tomto článku, budete muset dodržovat následující.

  • Jakákoli nejnovější verze Docker Desktop bude fungovat na Windows, Linux nebo macOS. Tento výukový program používá verzi 3.1.0 běžící na Windows 10.

Spuštění kontejneru NGINX

Docker exec spouští příkazy v kontejnerech. K tomu však musíte mít nejprve kontejner, ve kterém budou tyto příkazy spouštěny. Začněme stažením obrazu Dockeru a vytvořením demo kontejneru.

  1. Vytvořte nový adresář, tento tutoriál používá C:\gitrepos\test , k uložení souborů použitých pro kontejner.

2. Vytvořte soubor s názvem dockerfile (bez přípony) obsahující následující kód. Dockerfile definuje kroky potřebné k vytvoření kontejneru.

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

3. Dále vytvořte soubor ve stejném adresáři s názvem index.html který obsahuje následující kód. Toto je soubor HTML, který po spuštění kontejneru zobrazí zprávu 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. Nyní vytvořte kontejner Nginx Docker. Protože je soubor Dockerfile v aktuálním pracovním adresáři, zadejte . aby motor Docker věděl, že se tam má podívat. Nezapomeňte také označit kontejner tagem my-ngnix pomocí t parametr pro zajištění snadnější reference v budoucnu.

docker build -t my-nginx .

5. Nyní, když je kontejner vytvořen, spusťte kontejner pomocí příkazu 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. Nakonec otevřete webový prohlížeč a přejděte na http://localhost/ abyste viděli následující.

Spouštění příkazů pomocí Docker Exec

Při spouštění příkazů v kontejneru Docker může být nutné spustit příkaz interaktivně. Interaktivní spouštění příkazů znamená zadání příkazu, získání zpětné vazby, zadání jiného příkazu atd. Interaktivní příkazy převezmou vaši relaci a zabrání vám v čemkoli jiném.

Co když ale již znáte příkazy, které se mají odeslat do kontejneru, a chcete příkazy spouštět na pozadí? V takovém případě můžete spouštět neinteraktivní příkazy. Neinteraktivní příkazy vám umožňují odeslat příkaz do Dockeru a okamžitě vrátit ovládání konzole.

Vyhledání názvu a ID kontejneru

Nyní, když máte kontejner postavený, můžete provádět příkazy uvnitř kontejneru. Před spuštěním příkazu vyhledejte buď název nebo ID kontejneru NGINX. V příkazech Dockeru bude fungovat buď název, nebo ID. S ohledem na to může být zapamatování ID náročnější než jméno!

Chcete-li zobrazit informace o spuštěném kontejneru, spusťte Docker ps příkaz pro výstup následujících informací.

docker ps

Zkopírujte buď jedinečné ID, e17e4b6be01a , nebo náhodně vygenerovaný název mystifying_chandrasekhar do schránky pro pozdější použití.

Spuštění neinteraktivního příkazu pomocí Docker Exec

Jako příklad spuštění neinteraktivního příkazu zkopírujte a spusťte níže uvedený příkaz, abyste vrátili seznam souborů v /var/log adresář s ls -l příkaz. Vše předejte za názvem kontejneru mystifying_chandrasekhar , do exec Dockeru příkaz.

docker exec mystifying_chandrasekhar ls -l /var/log

Vyhýbání se výstupu z konzoly pomocí příkazů Docker

Okamžitým vrácením ovládání shellu uživateli se velké operace vyhýbají svazování konzole. Zbavte se výstupu konzoly s odděleným d volba. Níže uvedený příkaz vytvoří soubor /tmp/execWorks pomocí touch příkaz v kontejneru a nezobrazuje žádný výstup na konzole.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

Provádění interaktivních příkazů pomocí Docker Exec

Až do této chvíle jste se naučili spouštět neinteraktivní příkazy v kontejneru Docker pomocí docker exec . Můžete se však setkat s situací, kdy budete muset odstraňovat problémy s kontejnerem, například když potřebujete interaktivně zadávat příkazy kontejneru. V takovém případě musíte příkazy spouštět interaktivně.

Interaktivní spouštění příkazů pomocí docker exec vyžaduje dvě možnosti, i a t . i volba ponechává STDIN otevřený, což umožňuje odesílání příkazů do kontejneru a t volba přiděluje pseudo-TTY (PTY), komunikační kanál, pro psaní příkazů.

Zkopírováním a vložením následujícího příkazu otevřete interaktivní příkazový řádek do běžícího kontejneru Docker s Bourne (sh) shellem, jak je indikováno změnou výzvy na / # .

docker exec -it mystifying_chandrasekhar sh

Jakmile jste v shellu, spusťte níže uvedené příkazy, abyste předvedli výpis souborů z kontejneru. Nakonec spusťte exit příkaz opustit interaktivní shell.

ls -l /var/log
exit

Chcete-li otevřít interaktivní výzvu v konkrétním adresáři, předejte cestu do w možnost, která říká Dockeru, aby spustil shell v určeném adresáři.

Předávání proměnných prostředí do běžícího kontejneru

Mnoho programů používá proměnné prostředí k nastavení konfigurací při spuštění. Například většina aplikací Java vyžaduje JAVA_HOME proměnnou prostředí, kterou chcete nastavit na cestu Java.

Proměnné prostředí můžete předat relaci pomocí e volba. Například možná potřebujete naplnit proměnné prostředí nazvané MYVAR do běžícího kontejneru. Chcete-li to provést, použijte e a zadejte pár klíč/hodnota MYVAR="<some value>" jak je uvedeno níže.

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

Předávání proměnných prostředí pomocí souboru

Pokud máte mnoho proměnných prostředí nebo sdílenou konfiguraci, uložení těchto proměnných do souboru může být jednodušší. Předejte soubor přes relativní nebo absolutní cestu do Dockeru pomocí --env-file volba. Tato technika se často používá k poskytování bezpečných přihlašovacích údajů do kontejneru. Ujistěte se, že nikdy nesvěřujte přihlašovací údaje do správy verzí!

Vytvořte textový soubor s názvem env-vars.txt s proměnnými prostředí, které se mají předat, a jejich hodnotami. Tento soubor lze nazvat jakkoli chcete a nepotřebuje .txt přípona souboru.

Předejte proměnné prostředí do Dockeru pomocí env-file volba. Ověřte, že jsou proměnné dostupné pomocí echo příkaz, jak je znázorněno na níže uvedeném snímku obrazovky.

# 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

Interakce s běžícím kontejnerem jako jiný uživatel

V produkci aplikace často běží jako konkrétní uživatel, aby byl omezen jejich přístup. Pokud spouštíte aplikace jako konkrétní uživatel v produkci, měli byste tak učinit také při testování příkazů.

V tomto příkladu je kontejner Docker spuštěn jako nginx uživatel. Předejte uživatele do w možnost říct Dockeru, aby spustil kontejner jako nginx účet. whoami příkaz spuštěný z kontejneru potvrzuje, že nginx uživatel je skutečně použit.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami

Další kroky

Naučili jste se spouštět příkazy v běžícím kontejneru pomocí docker exec příkaz. Pomocí exec příkaz pro zadávání a dotazování běžících kontejnerů, máte ve svém arzenálu nový výkonný nástroj pro odstraňování problémů s kontejnery Docker.

Nyní zkuste posunout to, co jste se naučili, o krok dále a použijte řízení verzí Git k natažení statického webu do kontejneru namísto kopírování jednoho souboru. Pokud je pro vás Git novinkou, pak je skvělým místem, kde začít, článek Průvodce pro začátečníky ke kódu Visual Studio a Gitu.


Docker
  1. Některé příkazy DOCKER

  2. Příkazy Dockeru Rychlý průvodce Cheat Sheet

  3. Vytvoření prvního kontejneru Docker Windows Server Container

  1. Jak spustit příkaz na spuštěném kontejneru Docker

  2. Jak změnit časové pásmo pro kontejner Docker

  3. Vysvětlení výstupu příkazu „docker stats“.

  1. Jak vložit SSH do běžícího kontejneru Docker a spustit příkazy

  2. 14 Nebezpečné příkazy terminálu Linux

  3. Jak zadat název hostitele pro běžící kontejner?