db.dobo.sk

docker – jak, co, kde, ako…

2 komentárov

Filosoficky uvod.  Dnes je kontajnerizacia velke hype a Docker je velkym standardom, ale: primarne bol vyvinuty a urceny vyvojarom, pre rychlu a standardizovanu cestu nasadenia “VM”. Pre produkciu to nebolo moc urcene, pokial clovek nepouziva nejaky framework typu K8s – napr. samotna dokerizacia neriesi HA a podobne. Tudiz skutocnou vyhodou Dockeru je len rychle standardizovane nasadenie nejakeho prostredia…

Druhou velkou filosofickou vecou je, ze Docker images/kontajners su urcene ako static – dockerfile predpisuje ich stav a zmenovost (napr. datafily a pod.) nie su priamo v kontajneri ziaduce. Preto je dolezite pre data, ktore maju byt pritomne aj po likvidacii kontajneru, separatnu vlastnu volumu.

Linky pre pohodovu instalaciu:

Install Docker engine (CE) na Linux Mint

Install Docker Composer na Linux Mint

Install Portainer na Ubuntu

 

  • docker bezi ako demon (dockerd), takze klasicky systemctl… Pripaja sa k nemu klientom (docker) cez API. Dockerd managuje registries (proste objekty v dokeru). Architekturny prehlad tu.
  • docker info —-> vypise stav dockeru, pocet kontajnerov, volumy a pod… zakladny prehlad
  • docker images —-> vylistuje zaregistrovane images
  • docker ps —-> vylistuje beziace kontajnery
  • docker ps -a ——> vylistuje vsetky kontajnery (alebo docker container ls -a)
  • images do kontajnerov je mozne stahovat rucne, alebo cez docker pull … Kazdopadne oba sposoby vyzaduju login na docker.com
  • je nutne uvedomit si rozdiel medzi image a kontajnerom – jeden image umoznuje spustat hromadu kontajnerov, ktore su identifikovatelne nazvom, alebo ID (nejaky hash…)

Priklad – postgres v dockeru

docker pull postgresql:13 —> stiahne image postgresu 13 z docker.com

docker run –name postgres-vanilla -e POSTGRES_PASSWORD=tajne_heslo -d -p 5432:5432 postgres:13 —-> vytvori z image postgres:13 kontajner (instanciu) nazvanu “postgres_vanilla” v detached mode. Heslo pre superusera, mapovanie portov

docker exec -it postgres-vanilla bash —-> umoznuje dostat sa interaktivne do bashu kontajneru

psql -U postgres -h localhost -p 5432 —-> spustam psql na hoste a kedze mapovanie portov, tak sa pripojim na postgres do kontajneru

docker start/stop postgres-vanilla —-> vypina a zapina beh kontajneru (nelikviduje ho!, t.j. data v kotajneri, ktore tam boli pridane po vytvoreni kontajneru, su zachovane)

images

V praxi sa samozrejme pouzivaju vlastne (nakastomizovane) images. Tie sa najlepsie vytvaraju skopirovanim existujuceho image. Predpisom pre novy image je subor Dockerfile a novy image sa vytvara komandom docker build.

storage

Su 3 typy: volumy, bind mounty a tmpfs. Volumy su manageovane dockerom, bind mounty mountuju adresar hosta do kontajneru a tmpfs je ramdisk. Aj ked vsade mozne po nete je udavana skratkovita syntax s prepinacom -v, je lepsie (cistejsie) pouzivat verbose variantu –mount

Prehladne o storage tu na ofiko stranke (tam aj dobry obrazok).

volumy

Pri runu kontajneru sa automaticky vytvori voluma, ktora storuje subory kontajneru. Zalezi na konfigu dockeru, ale typicky vo /var/lib/docker/volumes/  Aj v pripade, ze niekto zlikviduje kontajner (docker container rm), voluma zostava aj so subormi, akurat je to “sirota” bez vazby na konkretny kontajner. Jedna voluma moze “obsluhovat” viac kontajnerov. Dau sa vyuzit na stahovanie medzi hostami – normalne sa skopiruje voluma, ktora je len adresarom.

docker volume ls —–> vylistuje volumy

docker volume inspect XXXX —–> detailne info o konkretnej volume

docker prune —–> zmaze vsetky “sirotky”

docker volume create XXXX ——> vytvori samostatnu volumu

Viac o volumach v orig dokumentacii dockeru

Networking

Podobne ako v prípade Oracle virtualboxu, je networking možné realizovať viacerými spůsobmi (izolácia, komunikácia po kontajnerovej sieti, komunikácia len s hostom a pod.). Je 5 základných módov (driverov):

  • bridge (default) – komunikácia medzi kontajnermi na jednom hoste. Kernel hosta vytvorí bridge a kontajnery komunikujú cez neho.
  • host – kontajner nedostane vlastný sieťový namespace, ale komunikuje cez IP stack hosta a využíva porty hosta.
  • overlay – vytvára sieťovú vrstvu nad IP stackom viacerých hostov a prepája kontajnery medzi hostmi. Používa sa často so swarmom, definuje ingress a gwbridge (= nutná virtuálna infraštruktúra nad hostmi)
  • ipvlan – kompletná virtualizácia siete na 2 (linkovej) a 3 (IP) vrstve. Naštudovať…
  • macvlan – potrebné v prípade, že chceme sieťovanie stavať na fyzickej vrstve a teda assignovať MAC adresy. Naštudovať…

Klikacie nadstavby

Docker Desktop

Pre hratky na ntb je obcas celkom vyuzitelny Docker Desktop – proste sprava kontajnerov cez klikacie prostredie. Je nutne mat docker engine a docker compose. Pri instalacii som sa potykal s dependency hell, ktory bol elegantne vyrieseny tymto diskusnym vlaknom… No, napokon som ho stejne odinstaloval a pouzil:

Portainer

Portainer je “lahke” desktopove rozhranie pre klikanie dockeru. Tu link na instalaciu.

píše: ďobo

November 11th, 2021 o 10:40 pm

chlievik: docker

2 odpovedí to 'docker – jak, co, kde, ako…'

Subscribe to comments with RSS or TrackBack to 'docker – jak, co, kde, ako…'.

  1. docker inspect -f ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ NAZOV_KONTAJNERU

    = na akej IP nacuva konkretny kontajner

    dobo

    5 Aug 23 at 16:09

  2. docker stop $(docker ps -q) = zastavuje vsetky beziace kontajnery

    Petricek

    5 Aug 23 at 20:53

okomentuj