Obvykle chcete, aby aplikace Docker byly plně obsaženy, ale někdy je pro účely vývoje nebo automatizace užitečné pracovat s kontejnery Docker, jako by existovaly virtuální počítače se systémem Linux. Docker poskytuje nástroje pro spouštění příkazů a dokonce i celých shellů uvnitř kontejnerů.
Spouštění příkazů v kontejnerech
Chcete-li spustit příkaz v kontejneru, budete potřebovat jeho ID kontejneru, pokud jste pro tento kontejner nenastavili konkrétní název. Toto je dlouhý hexadecimální řetězec, který můžete najít ve výpisu procesu Docker:
docker ps
Potom můžete použít exec -it
příkaz ke spuštění uvnitř kontejneru. Například zobrazení výstupu souboru protokolu:
docker exec -it containerID tail /var/log/nginx/access.log
Skripty můžete také spouštět uvnitř kontejnerů:
docker exec -it containerID script.sh
-it
příznaky jsou pro „interaktivní režim“ respektive TTY a používají se téměř neustále. Existuje několik dalších příznaků, které můžete použít:
--workdir
nebo-w
změní aktuální adresář před příkazem.--detach
, nebo-d
, spustí příkaz na pozadí.--env
, nebo-e
, nastaví proměnné prostředí před spuštěním.--env-file
dělá totéž, ale je bezpečnější pro manipulaci s tajemstvími.--privileged
spustí příkaz s rozšířenými oprávněními.--user
běží jako jiný uživatel
To samozřejmě funguje pouze na běžícím kontejneru. Pokud jste chtěli pozastavit kontejner za účelem údržby, budete muset buď nasadit aktualizace prostřednictvím nové verze bitové kopie, nebo provést změny v datech připojených ke svazku z hostitelského OS.
SSHing do kontejneru
Nejste omezeni na jednoduché příkazy, shell můžete skutečně otevřít spuštěním /bin/bash
jako příkaz. Možná budete omezeni dostupnými nástroji – většina kontejnerů má poměrně barebonovou instalaci Linuxu – ale spouštění mnoha příkazů je mnohem jednodušší.
docker exec -it containerID /bin/bash
Toto je jednoduše shell přístupný z hostitele, který ve většině případů funguje dobře. Ale pokud chcete, můžete své kontejnery nastavit tak, aby byly zcela dostupné přes SSH jako VPS. Další informace o tomto nastavení si můžete přečíst v našem průvodci spuštěním služby SSH v kontejneru Docker.
SOUVISEJÍCÍ: Jak SSH do kontejneru Docker
Kopírování souborů do az kontejnerů
Spouštění příkazů pomocí exec -it
funguje, ale mezi hostitelem a kontejnerem je stále vrstva, která brání snadnému skriptování. Za prvé, i když je snadné posílat příkazy do kontejneru, je těžší získat výstup ze souborového systému.
Zatímco můžete použít STDOUT z exec -it
do jiných služeb v hostitelském OS, můžete také kopírovat soubory do a ze souborového systému kontejneru. Například vytažení souboru protokolu a jeho vložení na hostitele:
docker cp container:/var/log/nginx/example.log example.log
Nebo vytažení celých adresářů:
docker cp nginx:/etc/nginx/ nginxconfig/
Pokud to však děláte pravidelně, možná budete chtít zvážit použití vazby nebo připojení svazku, aby byla data přímo dostupná z hostitele.
SOUVISEJÍCÍ: Jak používat Docker Cp ke kopírování souborů mezi hostitelem a kontejnery