Docker 101

alebo nie príliš stručný úvod do technológie Docker

About

Goals

  • zoznámiť sa so základmi používania nástroja docker
  • porozumieť rozdielu medzi obrazom a kontajnerom

Content

Check your installation!

Ešte predtým, ako sa pustíme do práce, overíme úspešnosť inštalácie. Zoznámime sa teda minimálne s príkazmi info a version.

Task

Overte verziu vašej Docker-ovskej inštalácie.

Na zistenie verzie Docker-a máme niekoľko spôsobov:

  • Môžeme spustiť príkaz docker s prepínačom --version, ktorý zobrazí verziu klienta a skončí:

    $ docker --version
    Docker version 20.10.3, build 48d30b5
  • Môžeme spustiť príkaz docker s príkazom version, ktorý zobrazí verziu ako klienta, tak aj servera:

    $ docker version
    Client: Docker Engine - Community
     Version:           20.10.3
     API version:       1.41
     Go version:        go1.13.15
     Git commit:        48d30b5
     Built:             Fri Jan 29 14:33:58 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.3
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.13.15
      Git commit:       46229ca
      Built:            Fri Jan 29 14:31:38 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.3
      GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
     runc:
      Version:          1.0.0-rc92
      GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
  • Môžeme spustiť príkaz docker s príkazom info, ktorý zobrazí informácie o celom systéme:

    $ docker info
    # výpis príkazu je dlhší...

Task

Spustite kontajner z obrazu bletvaska/hello-world.

Kontajner z obrazu spustíme príkazom container run:

$ docker container run bletvaska/hello-world
Hello from Docker Container!
============================

                       ##         .
                 ## ## ##        ==
              ## ## ## ## ##    ===
          /"""""""""""""""""\___/ ===
     ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
          \______ o           __/
            \    \         __/
             \____\_______/


Hostname: d4e455680508
      IP: 172.17.0.3
    Time: 18:37:48

Tentokrát sa kontajner rovno spustil, nakoľko obraz bol už stiahnutý (pri spustení po inštalácii).

Starting and Stopping Containers

V tomto kroku sa pozrieme na to, ako v kontajneri spustiť (nie len) webový server Nginx. Okrem toho sa pozrieme aj bližšie na to, čo sa deje na pozadí, s čím nám pomôže pohľad na architektúru Docker-a.

Docker Architecture

Task

Spustite webový server Nginx z obrazu nginx a presmerujte jeho port 80 na port 8080.

Webový server spustíme príkazom:

$ docker container run --publish 8080:80 nginx

Pozrime sa však na to, čo sa deje na pozadí:

  • Docker Client vytvoril požiadavku na spustenie kontajneru z obrazu nginx
  • Docker Engine sa najprv pozerie, či nemá obraz s názvom nginx dostupný lokálne Keďže ho nemá, tak stiahne (pull) najnovší nginx obraz z Registry.
  • Po stiahnutí obrazu (spolu so všetkými závislosťami, resp. vrstvami) spustí Docker Engine nový kontajner z obrazu nginx.
  • Tým sa na pozadí spustí príslušný proces, ktorým sa spustí webový server/proxy nginx.

Task

Otestujte funkčnosť spusteného webového servera v kontajneri.

Ak ste postupovali správne, otvorte prehliadač na adrese http://localhost:8080.

Task

Vypíšte si zoznam aktuálne spustených kontajnerov.

Zoznam spustených kontajnerov zobrazíte príkazom container ls:

$ docker container ls
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                    NAMES
6c864671b00e   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp     laughing_kare

Príkaz ls zobrazí len práve spustené kontajnery. Ak ho však spustíme s prepínačom -a, uvidíme všetky kontajnery (aj tie, ktoré sa už skončili):

$ docker container ls
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                    NAMES
6c864671b00e   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp     laughing_kare
d4e455680508   bletvaska/hello-world   "/entrypoint.sh /bin…"   2 hours ago     Exited (0) 2 hours ago                             eloquent_allen

Task

Zastavte spustený kontajner s webovým serverom Nginx.

Spustený kontajner je možné zastaviť príkazom container stop s uvedením jeho identifikátora (stĺpec CONTAINER ID) alebo názvu (stĺpec NAMES):

$ docker container stop 6c864671b00e

Task

Odstráňte zastavený kontajner webového servera.

Kontajner sme zastavili, čím sme zmenili jeho stav z Running na Exited. Ukončený kontajner však vieme opäť spustiť príkazom start:

$ docker container stop 6c864671b00e

Ak však chceme ukončený kontajner naozaj odstrániť, použijeme príkaz rm:

$ docker container rm 6c864671b00e

Ak je kontajner stále spustený, odstránite ho príkazom rm s prepínačom -f.