db.dobo.sk

docker – jak, co, kde, ako…

bez komentára

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.

  • docker bezi ako demon, takze klasicky systemctl… Vsetko cez sudo, zda sa, ze kontajnerizacia ma nejaku hyperbezpecnost :)
  • 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

bind mount

píše: ďobo

November 11th, 2021 o 10:40 pm

chlievik: docker

okomentuj