docker run
command je jedním z prvních příkazů, které byste se měli po instalaci Dockeru naučit. Ale přemýšleli jste, jak jinak můžete použít docker run
příkazy pro efektivní nasazení a správu vašich aplikací? Procházení jednoho příkladu spuštění Dockeru (docker run)
by bylo skvělé. Ale hádejte co, v tomto tutoriálu získáte více!
V tomto článku se dozvíte, jak vylepšit hru DevOps pomocí příkladu spuštění Dockeru, který můžete použít ke zlepšení pracovního postupu.
Čtěte dál a nikdy se neztratíte, když znovu spustíte příkazy Dockeru!
Předpoklady
Tento tutoriál bude praktickou ukázkou. Pokud chcete sledovat, ujistěte se, že máte následující.
- Počítač Linux – Tato ukázka používá Ubuntu 20.04, ale bude fungovat jakákoli distribuce Linuxu. Zde je návod, jak nainstalovat Ubuntu.
- Docker nainstalovaný v počítači.
- Uživatelský účet s právy root/sudo.
Příklad spuštění Dockeru č. 1:Interaktivní spuštění kontejneru
Možná spouštíte kontejnery už nějakou dobu, ale věděli jste, že existuje několik situací, kdy je vhodné spustit kontejner Docker v interaktivním režimu?
Docker vám umožňuje spouštět kontejnery v interaktivním režimu, když:
- Řešíte problém a potřebujete vidět výstup příkazů provedených uvnitř kontejneru.
- Experimentujete s novým příkazem Docker a chcete vidět výsledky příkazu v reálném čase.
- V kontejneru spouštíte proces, který od vás vyžaduje ruční zadání.
Při provádění příkladu spuštění Dockeru ( docker run
) bez voleb, výchozí chování je spustit kontejner v interaktivním režimu. Když spustíte kontejner v interaktivním režimu, můžete vidět výstup příkazů, které spouštíte v kontejneru na vašem terminálu, jak jsou spouštěny.
1. Spuštěním následujícího příkazu spusťte kontejner (my_nginx
) v interaktivním režimu a publikovat (-p
) port 80
kontejneru na port 8080
vašeho hostitelského počítače. Název kontejneru můžete libovolně změnit.
Příkaz používá nginx
obrázek z centra Docker k vytvoření kontejneru a automaticky se odstraní (--rm
) kontejneru, když je kontejner zastaven.
docker container run --rm --name my_nginx -p 8080:80 nginx
Protože používáte uživatele bez oprávnění root s práva sudo , při spouštění příkazů Dockeru není třeba přidávat sudo
Výstup protokolu webového serveru nginx uvidíte přímo ve svém terminálu, jak je znázorněno níže.

Spuštění interaktivního kontejneru poskytuje mnoho informací, ale možná dáváte přednost filtrování informací, které potřebujete. Pokud ano, připojte příznak -a a zadejte standardní proud (-a) pro kontejner, jak je znázorněno níže.
Zadáním standardního streamu sdělíte Dockeru, aby zobrazil pouze výstup stdout kontejneru my_nginx.
docker container run -a stdout --rm --name my_nginx -p 8080:80 nginx
Ve výchozím nastavení, pokud nezadáte příznak -a, jsou k terminálu připojeny stdin, stdout a stderr. Parametr -a přebírá následující argumenty a pomáhá uklidit váš výstup, abyste viděli pouze relevantní informace:
-a stdin
– připojístdin
do kontejneru, přičemž všechny vstupy na vašem terminálu budou odeslány do kontejneru.
-a stdout
– připojístdout
do kontejneru a zobrazí veškerý výstup generovaný kontejnerem do vašeho terminálu.
-a stderr
– připojístderr
do kontejneru, zobrazení všech chybových zpráv generovaných kontejnerem do vašeho terminálu.
Níže můžete vidět, že výstup je nyní méně nepřehledný.

2. Dále otevřete další terminál a spusťte docker ps
zobrazíte seznam kontejnerů běžících na vašem hostitelském počítači.
docker ps
Níže můžete vidět svůj kontejner my_nginx uvedený ve výstupu.

3. Nakonec spusťte curl
příkaz níže k otestování webového serveru nginx.
curl http://localhost:8080
Níže můžete vidět, že výstup protokolu webového serveru nginx se zobrazí ve vašem terminálu (na levé straně), jakmile se výstup vygeneruje.

Příklad spuštění Dockeru č. 2:Spuštění kontejneru v odpojeném režimu
Právě jste se naučili spouštět své kontejnery v interaktivním režimu a vidět výstup v terminálu, jak se spouštějí. Pokud ale nehledáte výstupy kontejneru ve svém terminálu, můžete kontejner spustit v odděleném režimu.
V odpojeném režimu běží kontejner na pozadí a vy nevidíte výstup příkazů, které v kontejneru spouštíte ve svém terminálu.
Spuštěním následujícího příkazu spusťte kontejner (my_nginx
) v odděleném režimu (-d
).
docker container run --rm --name my_nginx -d -p 8080:80 nginx
Jakmile kontejner běží v odděleném režimu, Docker přesměruje výstup do protokolů kontejneru. V tomto okamžiku běží kontejner my_nginx ve výstupech příkazů na pozadí, jak je znázorněno níže.
Ve výstupu můžete také vidět jedinečné ID kontejneru. Toto ID můžete použít k připojení kontejneru nebo ke spuštění/zastavení/odstranění kontejneru.

Nyní spusťte docker ps
pro zobrazení seznamu kontejnerů běžících na vašem hostitelském počítači.
Protože kontejner (my_nginx) běží na pozadí, můžete spouštět libovolné příkazy, aniž byste museli otevírat nový terminál.
docker ps
Uvidíte následující výstup, který ukazuje, že my_nginx kontejner nyní běží v odpojeném režimu.

Pokud z nějakého důvodu vaše webové servery NGINX nefungují správně, když váš kontejner běží v odděleném režimu, budete muset připojit svůj terminál k běžícímu kontejneru. Ke spuštěnému kontejneru se můžete připojit spuštěním docker attach
příkaz následovaný ID nebo názvem kontejneru (my_nginx
), jak je uvedeno níže.
docker container attach my_nginx
Jak vidíte níže, úspěšně jste se připojili k my_nginx kontejner. Nyní můžete zjistit hlavní příčinu problému a opravit ji.

Vytvoření překlenovací sítě
Jednou z výhod používání Dockeru je, že spravuje síť vašich kontejnerů za vás. S Dockerem se nemusíte starat o konfiguraci sítě. Docker za vás nastaví síť automaticky. Včetně vytváření sítí, připojování kontejnerů k sítím a správy IP adres.
Podívejte se, jak Docker nastavuje síť pro vaše kontejnery a vytváří mostovou síť.
1. Spusťte docker
příkaz níže ke spuštění kontejneru Ubuntu s plným přístupem k síťovým zdrojům na hostitelském počítači (--net=host
), což je užitečné pro ladění.
Volby -ti říkají Dockeru, aby ponechal kontejner v interaktivním režimu. Tuto volbu musíte zadat, když pracujete s prostředím Bash. Spuštění tohoto příkazu jako v části „Interaktivní spuštění kontejneru“ nefunguje.
docker run -ti --rm --net=host ubuntu bash

2. Dále spusťte apt update
příkaz v kontejneru pro aktualizaci seznamu balíčků.
apt update -y

3. Spusťte níže uvedený příkaz pro install
bridge-utils
balík. Tento balíček je potřebný k vytvoření a správě přemosťovacích zařízení.
apt install bridge-utils

4. Nyní spusťte následující brctl show
příkaz k zobrazení seznamu mostních sítí ve vašem systému.
brctl show
Zobrazí se seznam přemosťovacích sítí podobný následujícímu výstupu. Všimněte si, že existuje přemosťovací zařízení s názvem docker0. Tato síť je virtuální síť, kterou Docker používá k vytváření virtuálních sítí pro vaše kontejnery, pokud neurčíte vlastní přemosťovací virtuální síť.

5. Otevřete jiný terminál a spusťte docker network
příkaz níže k vytvoření nové sítě. Síť můžete pojmenovat jinak, ale v tomto tutoriálu se síť jmenuje my-ata-network
.
docker network create my-ata-network
Zobrazí se vám jedinečné ID sítě, jak je uvedeno níže. Poznamenejte si ID sítě, protože jej později přiřadíte k novému ID sítě mostu (krok šest).

6. Vraťte se do svého kontejnerového terminálu Ubuntu a spusťte následující příkaz pro zobrazení seznamu mostní sítě (show
) znovu ve vašem systému.
brctl show
Jak je ukázáno níže, ve výstupu uvidíte novou mostovou síť s názvem br-d9ba7f94ac73. Můžete vidět, že část d9ba7f94ac73 odpovídá ID sítě vrácenému v kroku 5.
Tento výstup potvrzuje, že Docker vytvořil novou síť mostu s názvem my-ata-network a přidal do této sítě kontejner Ubuntu.

Příklad spuštění Dockeru č. 3:Spuštění kontejneru s přesměrováním portů
Docker používá vestavěné funkce brány firewall linuxového jádra, konkrétně iptables
příkaz k vytvoření pravidel brány firewall. Tato pravidla brány firewall řídí, kdy jsou pakety odesílány mezi mosty, a jsou tak dostupné pro kontejnery připojené k těmto mostům.
Podívejte se, jak Docker dosahuje přesměrování portů pod kapotou pomocí iptables
.
1. Spusťte následující příkaz pro spuštění privilegovaného kontejneru Ubuntu (--privileged=true
) s plným přístupem ke všem síťovým zdrojům na hostiteli, včetně přesměrování portů.
docker run -ti --rm --net=host --privileged=true ubuntu bash
2. Dále spusťte níže uvedený příkaz pro update
seznam balíčků a install
iptables
.
apt update && apt install iptables

3. Spusťte iptables
příkaz níže na privilegovaném kontejneru Ubuntu k seznamu (-L
) nat
pravidlo tabulky.
iptables -n -L -t nat
To, co můžete vidět níže, jsou pouze výchozí pravidla dodávaná s Ubuntu.

4. Nyní spusťte níže uvedený příkaz a spusťte Ubuntu
kontejner s přesměrováním portů vašemu hostiteli na portu 8080
.
docker run -ti --rm -p 8080:8080 ubuntu bash

5. Nakonec znovu spusťte iptables
příkaz níže pro zobrazení nat
pravidlo tabulky.
iptables -n -L -t nat
Níže si všimněte, že je přidáno nové pravidlo, které přepošle všechny pakety z portu hostitele (8080) na port kontejneru (8080). Můžete vidět, že odhalení portů v Dockeru je pouze přesměrování portů na síťové vrstvě.

Vytvoření uživatelem definované sítě
Vaše zkouška Docker DCA vás může požádat o vytvoření mostních sítí pro vývojáře. Jak? Pomocí docker network
můžete vytvořit mostovou síť (uživatelem definovanou virtuální síť). docker network
poskytuje způsob, jakým mohou kontejnery v různých sítích komunikovat.
1. Spusťte docker network
příkaz níže k vytvoření nové přemosťovací sítě s názvem ata-app-net
pomocí bridge
Řidič.
docker network create --driver bridge ata-app-net

2. Dále spusťte následující příkaz pro výpis (ls
) mostních sítí na vašem hostiteli.
docker network ls
Všimněte si níže, že byla vytvořena nová uživatelsky definovaná mostová síť s názvem ata-app-net.

3. Pro zobrazení spusťte níže uvedený příkaz (inspect
) podrobnosti o ata-app-net
mostní síť.
docker network inspect ata-app-net
Níže si všimněte, že síť mostu ata-app-net má jednu podsíť (172.21.0.0/16). Tato podsíť je automaticky přiřazena, když vytvoříte přemosťovací síť. Můžete také vidět ovladač (most) spojený se sítí mostu.

4. Nyní spusťte tento příklad spuštění Dockeru ( docker run
) níže, chcete-li spustit několik alpinských kontejnerů na vašich uživatelsky definovaných mostních sítích, abyste se pokusili vzájemně pingovat.
docker run -dit --name ata-app1 --network ata-app-net alpine ash

5. Spusťte docker ps
příkaz k zobrazení seznamu běžících kontejnerů.
docker ps
Jak vidíte níže, oba kontejnery jsou nyní spuštěny.

6. Znovu spusťte níže uvedený příkaz docker network a inspect
vaše ata-app-net
mostová síť.
docker network inspect ata-app-net
Níže můžete vidět, že vaše dva kontejnery jsou nyní připojeny k síti mostu ata-app-net spolu se svými IP adresami a názvy.

7. Nyní spusťte docker container attach
níže a připojte se k vaší ata-app1
kontejner.
docker container attach ata-app1
8. Odešlete příkaz ping na ata-app2
abyste ověřili, že kontejnery mohou mezi sebou komunikovat.
ping ata-app2

9. Dále odešlete příkaz ping na google.com
abyste ověřili, že ata-app1 umí komunikovat s internetem.
ping google.com

10. Nakonec opakujte kroky sedm až devět a připojte se k ata-app2
a ping ata-app1
.
Nezapomeňte stisknout CTRL + PQ, abyste se odpojili od kontejneru ata-app1 a ponechali jej spuštěný. Jinak se kontejner zastaví a když odešlete příkaz ping ata-app1 z ata-app2, příkaz ping selže.
docker container attach ata-app2
ping ata-app1
ping google.com
Níže vidíte, že všechny pakety jsou přenášeny a přijímány, což potvrzuje, že oba kontejnery mohou komunikovat mezi sebou a s internetem.

Závěr
V tomto tutoriálu jste se naučili mnoho příkladů spuštění Dockeru ( docker run
) můžete použít k usnadnění nasazení a správy aplikací. Nyní můžete Docker používat efektivněji, když pochopíte, jak docker run
s a jak Docker nastavuje sítě pro vaše kontejnery.
V tuto chvíli již víte, jak využít příklad spuštění Dockeru ( docker run
) příkazy ke zvýšení vaší hry DevOps.
S těmito znalostmi, proč nenasadit své aplikace efektivněji a škálovatelnějším způsobem?