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

Pomocí Dockerfile ENTRYPOINT a pokynů CMD

Pokud jste někdy potřebovali při spuštění spustit jeden nebo dva příkazy v kontejneru Docker, tento návod je pro vás. Pomocí Dockerfile ENTRYPOINT a CMD instrukcí, můžete spustit tolik příkazů pro spuštění, kolik chcete.

V tomto tutoriálu se naučíte používat VSTUPNÍ POINT a CMD pokyny ke spouštění spouštěcích příkazů v Dockerfile a pochopení rozdílů mezi nimi.

Předpoklady

Protože tento tutoriál bude praktickou ukázkou, ujistěte se, že máte následující:

  • V tomto kurzu byl použit počítač se systémem Windows 10 – Windows 10 v10.0.19042.
  • Docker Desktop – Tento výukový program používá Docker Desktop v3.3.1.

Vytvoření souboru Dockerfile

Než budete moci spouštět příkazy pro spuštění kontejneru Docker, musíte nejprve vytvořit soubor Dockerfile. Dockerfile je textový dokument, který obsahuje seznam příkazů pro vytváření kontejnerů, obrázků Docker a určuje, jak se vytváří obrázek Docker.

1. Nejprve otevřete PowerShell jako správce.

2. Vytvořte novou složku pro uložení souboru Dockerfile a všech souvisejících souborů, které bude tento výukový program používat, a změňte se do tohoto adresáře. Tento tutoriál používá ~/docker .

mkdir ~/docker
cd docker

3. Nyní vytvořte prázdný textový soubor s názvem Dockerfile s následujícím příkazem.

cd > Dockerfile

Případně můžete vytvořit Dockerfile pomocí následujícího příkazu, pokud používáte Linux nebo Mac OS.

touch Dockerfile

4. Nakonec přidejte následující obsah do Dockerfile

FROM ubuntu:20.04

Nyní jste vytvořili brzký soubor Dockerfile!

Vytvoření obrázku dockeru

Nyní, když jste vytvořili svůj Dockerfile, musíte vytvořit obraz Dockeru, abyste mohli provádět příkazy zapsané v pokynech ENTRYPOINT a CMD Dockerfile. Jedním ze způsobů, jak vytvořit obrázek, je použít build příkaz.

V ~/docker adresáře, spusťte následující příkaz. Níže uvedený příkaz vytvoří obrázek Docker s názvem demo (-t demo ) ze souboru Dockerfile v ~/docker zadáním aktuálního pracovního adresáře (. ).

docker build -t demo .

Spuštění kontejneru Docker

Po vytvoření obrazu Dockeru budete potřebovat kontejner ke spuštění obrazu Dockeru, který bude provádět příkazy z instrukcí ENTRYPOINT a CMD Dockerfile.

Chcete-li spustit kontejner Docker, vyvolejte run příkaz k vytvoření zapisovatelné vrstvy kontejneru přes obrázek Docker (demo ). Níže uvedený příklad používá -it parametr pro interaktivní připojení ke kontejneru, abyste viděli ukázkový výstup.

docker run -it demo

Formulář Exec vs. Shell

Když začnete pracovat s Dockerfile a zjistíte, jak spouštět spouštěcí příkazy, můžete narazit na dvě různé metody definování těchto příkazů. Každá metoda vyvolá příkazy, ale dělá to trochu jinak.

Když Docker spouští příkazy, může tak činit přímo s názvem exec nebo projděte shell kontejneru (/bin/sh -c v systému Linux nebo cmd /S /C v systému Windows) s názvem shell .

Všimnete si příkazů spouštěných pomocí exec mít instrukci následovanou spustitelnými soubory k vyvolání následovanou jedním nebo více argumenty příkazového řádku, jak je uvedeno níže.

ENTRYPOINT ["executables", "parameter1", "parameter2", ...]
CMD ["executables", "parameter1", "parameter2:, ...]

Psaní příkazů v shell formulář na druhé straně nevyžaduje zalamování příkazů do hranatých závorek, jak je uvedeno níže.

ENTRYPOINT <command> "parameter1"
CMD <command> "parameter1"

Pokud nezadáte argument pro CMD , Docker vždy provede příkaz ve formě exec, např. CMD .

Pokud právě začínáte, na rozdílu mezi těmito dvěma vyvoláním příkazů nebude příliš záležet, ale jak budete pokročilejší, brzy uvidíte výhody a nevýhody každého z nich.

Spouštění příkazů při spuštění

Pojďme se nyní pustit do jádra tohoto tutoriálu a ušpinit si ruce tím, že si projdeme několik příkladů spouštění spouštěcích příkazů v rámci Dockerfile ENTRYPOINT a instrukce CMD.

1. Otevřete soubor Dockerfile, který jste vytvořili dříve, ve vašem preferovaném textovém editoru.

2. Zkopírujte a vložte ukázkový obsah Dockerfile do vašeho Dockerfile, jak je znázorněno níže, a uložte jej.

Tento Dockerfile vytvoří vrstvu pomocí ubuntu:20.04 jako základní obrázek. Poté řekne Dockeru, aby vyvolal echo předá mu příkaz Ahoj světe argument pro oba Dockerfile CMD a VSTUPNÍ BOD instrukce pomocí exec a shell formulář.

FROM ubuntu:20.04
# CMD Instruction
CMD ["echo", "Hello world"] # Exec Form
CMD echo "Hello world"      # Shell Form
# ENTRYPOINT Instruction
ENTRYPOINT ["echo", "Hello world"] # Exec Form
ENTRYPOINT echo "Hello world"      # Shell Form

3. V ~/docker adresář, vytvořte nový obraz spuštěním docker build a nazvěte to demo . Příkaz níže tags obrázek jako demo a hledá Dockerfile v aktuálním pracovním adresáři (. ).

docker build -t demo .

4. Nyní spusťte kontejner pomocí obrazu a poté spusťte kontejner Docker na základě obrazu Dockeru vytvořeného dříve. Nyní uvidíte, že kontejner vrací Ahoj světe který pochází z CMD instrukce uvedené v Dockerfile.

docker run -it demo

Použití proměnných v Dockerfile

Někdy nemusíte znát přesné argumenty příkazového řádku, které je třeba předat příkazu předem. Argumenty, které musíte předat příkazu, jsou vystaveny pouze za běhu. Namísto statického přiřazování argumentů příkazu můžete tyto argumenty zachytit a předat příkazům s proměnnými.

Proměnné Dockerfile můžete používat pouze v shell formulář. Docker nepodporuje proměnné v příkazu vyvolaném pomocí exec formulář.

Znovu otevřete soubor Dockerfile v preferovaném textovém editoru, nahraďte vše uvnitř následující řadou příkazů a uložte jej.

Tentokrát si všimnete, že Dockerfile používá proměnné prostředí a zobrazuje se pomocí ENV . V níže uvedeném příkladu definuje Dockerfile proměnnou prostředí s názvem name s hodnotou friend . Po vytvoření se na tuto proměnnou prostředí odkazuje pomocí $name .

Když Docker spustí kontejner založený na tomto Dockerfile, vyvolá echo a předejte argument Vítejte, příteli .

FROM ubuntu:20.04
ENV name friend

CMD echo "Welcome, $name"
# or
## ENTRYPOINT echo "Welcome, $name"

Nyní vytvořte obrázek Docker a spusťte kontejner znovu, volitelně s názvem značky shellform . Všimnete si, že Docker vyvolal echo a vrátil očekávaný výstup.

Kombinace pokynů ENTRYPOINT Dockerfile a CMD

Většinu času budete spouštěcí příkazy vyvolávat buď v instrukci CMD nebo ENTRYPOINT. Koneckonců, pomocí každé metody můžete vyvolat tolik příkazů, kolik chcete. Můžete však také vyvolat jeden příkaz a „vybudovat na něm“ pomocí obou pokynů.

Na základě předchozích příkladů možná máte soubor Dockerfile, který vypadá jako příklad níže. Jak je, pokud vytvoříte obrázek a spustíte kontejner z tohoto obrázku, Docker vyvolá echo příkaz a návrat Ahoj .

FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]

Možná máte další argument, který byste chtěli předat echo příkaz, ale ne hned. Možná byste to chtěli udělat dále v Dockerfile. Voláním CMD instrukce bez příkazu, můžete tak učinit.

Když zadáte příkaz ke spuštění prostřednictvím ENTRYPOINT instrukce následovaná CMD Docker automaticky převezme hodnotu předávanou CMD je argument; není příkaz.

Nyní přidejte CMD odkaz na instrukce bez příkazu, jen argument nazvaný world , jak je uvedeno níže.

FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]
CMD ["world"]

Instrukce Ckombinace by měly být vždy psány ve formě exec kvůli jeho chování „jako v poli“, kdy specifikuje hodnoty jednotlivě oddělené čárkami oproti všem v jednom řetězci.

Po vytvoření obrázku a spuštění kontejneru z obrázku můžete vidět, že místo dvou řádků výstupu (Ahoj a svět ), Docker vrátí pouze jeden, což znamená pouze jeden echo vyvolání příkazu.

Závěr

Nyní byste měli dobře rozumět spouštění příkazů pro spuštění kontejneru Docker prostřednictvím obou CMD a VSTUPNÍ BOD Pokyny pro dockerfile. Každá instrukce je trochu jiná, ale plní stejný úkol a lze ji dokonce použít společně.

Napadá vás scénář, kdy byste raději používali CMD přes VSTUPNÍ BOD spustit spouštěcí příkaz?


Docker
  1. Monitorujte linuxový server pomocí Prometheus a Grafana

  2. Je rozdíl mezi Sudo a Gksu stejný jako rozdíl mezi Sudo -i a Sudo -s?

  3. Rozdíl mezi CMD a ENTRYPOINT v Docker Images

  1. Instalace a používání Dockeru na CentOS a Fedoře

  2. Instalace a používání Dockeru na Ubuntu a Debianu

  3. Jak používat obrázky, kontejnery a soubory Docker do hloubky

  1. Docker CMD vs. Entrypoint Commands:Jaký je rozdíl?

  2. Použití skriptu Apache2Buddy pro výkon a stabilitu

  3. Jak vytvořit Docker Image z kontejneru a Dockerfile