Docker – návod pro začátečníky

1. Ú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.

2. 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
...

3. 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.

4. 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.

 

5. 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ší.

6. 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 kontejnerech

docker ps –a – informuje o všech kontejnerech, i těch zastavených.

docker stop [container name] – zastavuje kontejner

docker start [container name] – spouští kontejner

docker 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 kontejneru

docker logs [container name] – zobrazuje logy kontejneru

docker images – ověřuje dostupnost image

docker images rm [IMAGE_ID] – maže image

7. 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

Sdílení

Byl pro Vás článek užitečný a srozumitelný?