docker – jak, co, kde, ako…
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
- 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.
docker inspect -f ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ NAZOV_KONTAJNERU
= na akej IP nacuva konkretny kontajner
dobo
5 Aug 23 at 16:09
docker stop $(docker ps -q) = zastavuje vsetky beziace kontajnery
Petricek
5 Aug 23 at 20:53