
Při práci s nádobami přístavní dělník, použití klipartů může být dobrým výchozím bodem. Téměř v každém projektu však nastane čas, kdy potřebujete větší kontrolu, specifická nastavení nebo jednoduše zahrnout vlastní konfiguraci. Toto je místo vlastní obrázky Dockerfile.
V tomto článku vám poskytneme a podrobný průvodce, jasné a komplexní, takže se můžete naučit, jak vytvářet vlastní obrázky Docker. Od základních pojmů, jako je to, co je Dockerfile a jak funguje, až po pokročilé techniky, jako je optimalizace Dockerfile, používání proměnných, ukládání do mezipaměti a správa protokolů.
Co je to Dockerfile a proč jej potřebujete?
Dockerfile je prostě prostý textový soubor obsahující instrukce aby Docker věděl, jak vytvořit image. Každá instrukce v Dockerfile označuje konkrétní krok a Docker jej interpretuje jako vrstvu v konečném vygenerovaném obrázku.
Obrázky v Dockeru se skládají z neměnné vrstvy. Dockerfiles krok za krokem definují, jak by měly být tyto vrstvy vytvořeny, od výběru základního obrazu po kopírování souborů, instalaci balíčků nebo konfiguraci služeb. Dockerfiles je reprodukovatelný a umožňuje Plně automatizujte generování vlastních prostředí jednoduchým způsobem.
Tento přístup má několik výhod: reprodukovatelnost, snadné sdílení, lepší údržba a zabezpečení. Použití Dockerfile vám navíc umožňuje vyhnout se nutnosti ručně konfigurovat konfigurace při každém spuštění kontejneru. Vše je automatizované a dokumentované.

Jak Dockerfile funguje: Základy
Chcete-li vytvořit vlastní obrázky Dockerfile, první věcí je definovat, ze kterého základního obrázku začneme. To se provádí směrnicí Z. Například:
FROM ubuntu:20.04
Odtud jsou zahrnuty další pokyny, které vám umožní sestavit a upravit obrázek:
- KOPÍROVAT: zkopírujte soubory z místního počítače do souborového systému kontejneru.
- BĚH: provádí příkazy v obrazu sestavení (např. instalační balíčky).
- CMD: definuje, který příkaz bude ve výchozím nastavení proveden při spuštění kontejneru z tohoto obrázku.
- VSTUPNÍ BOD: nastavuje hlavní proces kontejneru, podobný CMD, ale více kontrolovaný.
- ENV: nastavuje proměnné prostředí v kontejneru.
- USER a WORKDIR: označuje, který uživatel bude provádět příkazy a jaký bude pracovní adresář.
Praktický příklad souboru Dockerfile by mohl být následující:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y sudo nano curl nmap
COPY script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
ENV direcIP=127.0.0.1
CMD ["/usr/local/bin/script.sh"]
Tento příklad nainstaluje potřebné nástroje a nakonfiguruje vlastní analytický skript s IP jako proměnnou, což umožňuje snadnou úpravu při spouštění kontejneru.
Organizace kontextu výstavby
Když Docker sestaví obrázek, udělá to z adresáře známého jako stavební kontext. Tento adresář by měl obsahovat:
- Soubor dockerfile.
- Všechny soubory, které chcete zkopírovat do kontejneru (zdrojový kód, skripty, konfigurace…).
- Soubor .dockerignore abyste se vyhnuli vkládání nepotřebných souborů.
Pokud například vytváříte obrázek pomocí aplikace Python, váš kontext sestavení by měl zahrnovat:
- dockerfile
- app.py
- požadavky.txt
To je nezbytné, aby Docker mohl během procesu sestavování správně zkopírovat potřebné prvky do kontejneru.
Zkompilujte vlastní obrázek
Jakmile budete mít svůj Dockerfile a kontext připravený, můžete vytvořit obrázek pomocí příkazu:
docker build -t nombreimagen:versión .
Například:
docker build -t miimagenpython:1.0 .
Koncová tečka («.») označuje, že kontext sestavení je aktuální adresář. Po dokončení vám Docker zobrazí ID obrázku a můžete jej zobrazit pomocí:
docker images
Otestujte a spusťte svůj vlastní obrázek
Spuštění kontejneru z vašeho nového obrázku je stejně jednoduché jako:
docker run --name miapp -it miimagenpython:1.0
Pokud jste jej nakonfigurovali správně (například pomocí Flask nebo nginx), můžete k němu přistupovat z prohlížeče, pokud jste správně namapovali porty:
docker run -p 4000:4000 miimagenpython:1.0

Použití proměnných prostředí (ENV)
Směrnice ENV umožňuje nastavit výchozí hodnoty, ale můžete je také přepsat za běhu. Praktickým příkladem by bylo nastavení IP adresy pro skenování pomocí nmap:
ENV direcIP=127.0.0.1
A pak spusťte kontejner takto:
docker run -e direcIP=192.168.1.1 miimagen
To umožňuje všestrannější a opakovaně použitelné obrázky, aniž byste je museli neustále upravovat.
Výchozí spustitelné soubory: CMD a ENTRYPOINT
Existují dva způsoby, jak určit, co se bude ve výchozím nastavení spouštět při spuštění kontejneru: CMD y VSTUPNÍ BOD. Rozdíl mezi těmito dvěma je v tom CMD lze přepsat snadno z terminálu, zatímco ENTRYPOINT promění kontejner v jakýsi „uzavřený“ spustitelný soubor.
Osvědčeným postupem je použít ENTRYPOINT ke spouštění spouštěcích skriptů a CMD jako výchozího nastavení. Například:
ENTRYPOINT ["/start.sh"]
CMD ["defaultvalue"]
Tímto způsobem můžete předat konkrétní argumenty, aniž byste změnili logiku obsaženého skriptu.
Doporučené postupy a optimalizace Dockerfile
Zde je několik klíčových doporučení při vytváření vlastních obrázků Dockerfile:
- Použijte obrázky na světlé bázi jako jsou Alpine, kdykoli je to možné (zabírají méně místa a jsou rychlejší).
- Pokyny RUN skupin v jednom bloku, aby se minimalizoval počet vrstev.
- Vyhněte se interaktivním pokynům (například výzvy k potvrzení). Vždy používejte
-yo--no-promptv zařízeních. - Odstraňte dočasné soubory po použití.
- Použijte .dockerignore jako byste to udělali s .gitignore, abyste nezahrnuli nepotřebné soubory.
Použití těchto pokynů zlepšuje výkon obrazu a snižuje bezpečnostní rizika.
Kontrola mezipaměti během výstavby
Docker používá inteligentní systém ukládání do mezipaměti, aby se vyhnul opakování kroků, které se nezměnily. To urychluje rekonstrukce. Pokud upravíte své vlastní obrázky Dockerfile, obnoví se pouze z řádku, který se změnil.
Pokud chcete vynutit úplnou přestavbu, můžete použít:
docker build --no-cache -t nombreimagen .
To zajišťuje, že vše bude provedeno od začátku, což je užitečné při změně externích souborů, které modul mezipaměti nezjistil.

Sdílení obrázků: Docker Hub a registry
Jakmile budete mít svůj vlastní obrázek vypůjčený, můžete jej nahrát do úložiště (např Docker hub) sdílet. Tok by byl:
- Zaregistrujte se do Docker Hub a vytvořit úložiště.
- Připojte svého klienta k Docker Hub s
docker login. - Označte obrázek s vaším uživatelským jménem:
docker tag miimagen username/miimagen:1.0
- Nahrajte obrázek pomocí:
docker push username/miimagen:1.0
Jakmile je hotovo, Každý si bude moci stáhnout a používat váš vlastní obrázek použitím:
docker pull username/miimagen:1.0
Integrace s Docker Compose
U složitějších projektů je běžné potřeba více kontejnerů (web, databáze, load balancer atd.). K tomuto účelu se používá docker-compose.yml, kde můžete definovat služby, které se mají spouštět.
Příklad použití s vlastním obrázkem by byl:
version: '3'
services:
web:
image: username/miimagen:1.0
ports:
- "4000:4000"
redis:
image: redis
Tak, Docker-compose dokáže nasadit služby z vlastních obrazů a kombinovat je. s ostatními standardy konzistentním způsobem.
Při spuštění docker-compose up, jsou spuštěny všechny definované služby, což je ideální pro kompletní vývojová prostředí.
Se všemi těmito nástroji a technikami můžete vytvořit robustní, přizpůsobená a efektivní prostředí pro všechny své projekty. Už se nebudete omezovat na obecné obrázky a vše si můžete přizpůsobit přesně podle svých potřeb.
