Docker – návod pro začátečníky
Poslední aktualizace 20. 12. 2022
Úvod
Návod vysvětluje první kroky při práci s Dockerem jako např. spouštění images nebo základní operace s kontejnery.
Instalace Dockeru
Instalace Dockeru není složitá. Z oficiálních stránek Dockeru si nainstalujte verzi vhodnou pro váš operační systém a postupujte dle instrukcí.
Po instalaci otevřete okno a napište: docker info
Pokud se proces instalace zdařil, uvidíte výpis informací o vaší instalaci Dockeru podobný jako v následujícím příkladu:
docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: overlay2
...
Otestujte Docker instalaci
Otestujete, jak instalace funguje spuštěním jednoduchého Docker image hello-world.
Docker nejprve hledá image v lokálním systému, když ho nenajde, stáhne ho z Docker Hub.
Hello-world zobrazí zprávu, že vše funguje:
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest
Následně spusťte příkaz docker ps –a
a uvidíte všechny kontejnery spuštěné v systému.
Vyhledání image v Docker Hub
Docker jsme úspěšně spustili a můžeme stáhnout některý z již existujících image z Docker Hub. Je nutné se přihlásit k účtu a ve vyhledávacím poli zadat jméno aplikace, pro kterou si přejete najít image. Jako příklad zkusíme spustit Nginx web server.
Když rozkliknete oficiální Nginx image, zobrazí se detaily o image jako přehled verzí image a linky na korespondující Dockerfiles. Dockerfile je textový dokument s příkazy, které můžete využít k manuálnímu postavení Docker image. Docker může images stavět automaticky přečtením instrukcí v Dockerfile.
Spuštění image v kontejneru
Pokud máte vybraný image, můžete s ním pracovat dvěma způsoby:
- Stáhnout image příkazem
docker pull
. Image se stáhne do lokálního úložiště a uvidíme ho na svém image listu. - Spustit image příkazem
docker run
. Pokud není image přístupné lokálně, dojde k jeho stažení a následnému spuštění.
Docker run je pro nás v tuto chvíli rychlejší možností, ale v jiných případech může být výhodnější image nejprve stáhnout.
Vybraný Nginx image spustíme následujícím příkazem:
$ docker run -it -p 80:80 nginx
Software nejprve ověří, zda už není image dostupný v počítači, pokud v něm není, stahuje z Docker Hub. Stahování z Docker Hub tak vlastně probíhá automaticky a není nutné nic dalšího provádět.
- docker run: umožňuje jakýkoli image spustit v kontejneru
- -it: kontejner je v interaktivním módu, neběží v pozadí
- -p 80:80: Bez tohoto parametru není možné komunikovat s Nginx serverem. Parametr mapuje port konetejneru 80 s portem hostujícího počítače 80. Images totiž mají předdefinované porty pro externí svět – náš Nginx kontejner má porty 80 a 443 pro http a https požadavky. Aby byla daná aplikace přístupná z vašeho přístroje, musíme port aplikace propojit s portem počítače. Toho dosáhneme parametrem –p host-port:container-port, v našem případě –p 80:8. Následně budeme schopní zaslat HTTP požadavek serveru z našeho lokálního přístroje otevřením URL http://localhost:80.
Otevřete internetový prohlížeč a na adrese http://localhost:80 by na vás mělo čekat následující sdělení, které ukazuje, že se spuštění kontejneru zdařilo.
Pokud chcete jen stáhnout image bez toho, aby došlo k jeho spuštění v kontejneru, použijte příkaz:
docker pull nginx
Následné vytváření kontejnerů z již stažených images je rychlejší.
Práce s kontejnery
S vytvořeným kontejnerem můžete dále pracovat různými způsoby – můžete ho spustit, zastavit nebo restartovat. Nemůžete však měnit kontejner samotný, např. mapování portu. Jakmile je kontejner vytvořený, nelze jeho konfiguraci měnit. Jedinou možností je zastavení kontejneru a vytvoření nového ze stejného image s jinými parametry.
Následujícími příkazy můžete provádět operace s kontejnery a images:
docker ps
– dává přehled o všech běžících kontejnerechdocker ps –a
– informuje o všech kontejnerech, i těch zastavených.docker stop [container name]
– zastavuje kontejnerdocker start [container name]
– spouští kontejnerdocker rm [container name]
– maže kontejner. (Je možné mazat jen zastavené kontejnery. Smazáním kontejneru se nevymaže jeho image.)docker inspect [container name]
– ukáže detaily o kontejnerudocker logs [container name]
– zobrazuje logy kontejnerudocker images
– ověřuje dostupnost imagedocker images rm [IMAGE_ID]
– maže image
Vytvoření vlastního Docker image
Zatím jsme používali již vytvořený image, Docker ale umožňuje jednoduše vytvářet vlastní images nebo upravovat existující. Pro vytvoření vlastního image musíme přidat soubor Dockerfile do projektu. Jedná se o prostý textový soubor, proto použijeme textový editor k přidání vlastních stavebních kroků do image.
Je důležité si uvědomit, že každý stavební krok v Dockerfile vytvoří novou vrstvu v image. Pokud dojde ke změně v jedné vrstvě, image provede změny ve všech vrstvách následujících, vrstvy pod změněnou vrstvou zůstanou nezměněné. Tomu se říká layer caching.
Budeme vycházet z předchozího příkladu a postavíme nový image na základě oficiálního Nginx image.
Otevřete Dockerfile v textovém editoru. Musíte začít specifikováním image, ze kterého budete vytvářet váš vlastní image – k tomu použijte příkaz FROM.
FROM nginx
COPY html /usr/share/nginx/html
Použitím příkazu FROM požadujeme, aby byl nový image vytvořený na základě nginx image.
Příkaz COPY zkopíruje obsah z html adresáře hostujícího systému do adresáře /usr/share/nginx/html kontejneru, který bude vytvořen.
Dále vytvoříme image příkazem:
$ docker build -t mynginx .
Tento příkaz vytváří nový image se jménem mynginx. Použili jsme dva argumenty:
- -t mynginx – dává Dockeru označení image
- tečka („.“) říká Dockeru, aby hledal Dockerfile v současném pracovním adresáři
Image máme vytvořený a můžeme vytvořit nový kontejner příkazem docker run.
$ docker run --name mynginx -p 80:80 -d mynginx