Čo je docker?

Čo je docker?
« kdy: 20. 01. 2024, 19:18:00 »
Ahojte, vopred sa ospravedlňujem za BFU otázku, ale čo to je ten Docker? Viete mi to vysvetliť aj pre laika? Ja viem, môžem si to vygoogliť, opýtať Bing Chatu / GPT chatu, alebo prečítať články na roote. Ano, môžem, ale z diskusií na roote sa dozviem viac. Hlavne sú tu na to rôzne názory, a tak mi môže niekto napísať svoj pohľad, aj pozitíva a negatíva. Taký Bing chat mi povie len to, čo nájde na internete (takže samé superlatívy) a treba ho brať s rezervou.

Z toho, čo o tejto technológii viem, ide o nejaké izolované prostredia, možno niečo ako VMká ale je to viac lightweight. Z toho, čo o tom viem, mi to pripomína Jails, čo som pred pol rokom riešil pod FreeBSD. Proste si pustím nejaké izolované prostredie s nejakým setom potrebných appiek na nejakú činnosť, a k tomu je to skombinované s podobnou filozofiou, ako má git (aj keď na iný účel). Niekde sú už hotové repozitáre plné docker imageov, a tie si môžem stiahnuť a používať.

Nedávno som niečo vyvíjal pre MCUs a snažil som sa rozbehnúť debug cez JTAG. Stiahol som nejakú utilitu pre debugovanie pre ESP32, a tam bol k stiahnutému kódu docker image (už si fakt nepamätám, k čomu to bolo, len viem, že sa niečo stiahlo z nejakého repa, podobne ako pri gite). Absolútne som netušil, čo robím, len som išiel podľa readme. Bolo to prostredie pripravené pre debugovanie. Vtedy, keď som to testoval, bol docker obrovské sklamanie, bolo to ultra pomalé. Oproti tomu, keď som to pustil priamo pod linuxom, to bolo rýchle ako blesk. Až som mal dojem, že to nebeží u mňa, ale niekde remotne na serveri (iné veci, čo spúšťam virtualizovane, idú rýchlo). Ale to bol fakt len môj dojem vytvorený na základe minimálnych skúseností. Preto by som bol rád, keby sa tu vysvetlil princíp fungovania (aspoň v skratke). Či je to bežne tak pomalé alebo bola chyba u mňa. A popravde, riešil som debugovanie MCUs, s tým som mal tiež dosť roboty, takže na štúdium dockeru vtedy nebol čas.

No teraz som v inej situácii. Chcem si spraviť ďalší eshop, mám vlastný VPS, na ktorom beží Windows Server 2019 (mám tam okrem PHP aj .NET aplikácie, takže preto ten Windows). Doteraz som PHP stránky spúšťal cez IIS. Funguje to síce celkom dobre, ale sú tam mierne odlišnosti oproti Apache, a musím tam občas riešiť veci, ktoré som na Apache riešiť nemusel (a hlavne ma iritujú tie klikacie tooly, stále musím preklikávať nejaké ikonky a menučka v IIS Manageri, a strašne ma to oberá o čas). A tak rozmýšľam, či by som si nestiahol nejaký docker image s LAMPom a nepustil to tam.

A ešte čo je Kubernetes? To je nejaký gui manager pre Docker, alebo to s dockerom nesúvisí? Niekde som to na pol oka zahliadol takže netušim.


Re:Čo je docker?
« Odpověď #1 kdy: 20. 01. 2024, 19:35:15 »
Velmi jednoducho:
Docker nepoznam, robim s nim minimlne, akurat stahujem img a z nich spustam docker kontajneri.

Ak chces rychlo zacat, tak nainstaluj docker prip. docker-compose.
Z registra, (defaultne docker hub) stiahnes hotovy img a z neho spustis kontajner.
Ak si chces img vybuldit sam, tak si napises jednoduchy dockerfile a vytvoris img.

Inak na internete je mnozstvo manualov, navodov, tutorialov.

alex6bbc

  • *****
  • 1 450
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #2 kdy: 20. 01. 2024, 20:07:50 »
docker je kontejner, ve kterem muzete izolovane poustet programy, aby byly oddeleny od hlavniho systemu.
je to lehci typ virtualizace, nez treba vmware, ktery emuluje cely samostatny stroj.

kubernetes je jako lod co veze ty kontejnery, tj. v ramci kubernetes muzete mit vice stroju a mezi nimi lze presouvat bezici kontejnery dockeru.

Re:Čo je docker?
« Odpověď #3 kdy: 20. 01. 2024, 20:15:51 »
Začnu od konce – Docker je především linuxová technologie. Mohou existovat i obrazy pro Windows, ale nevím, co umí a jestli by v tom vůbec šlo provozovat LAMP. Pokud byste si na Windows stáhnul běžný LAMP Docker image pro Linux, spustí se vám ve Windows ve virtualizaci Linux a teprve v něm LAMP. Pak nedává moc smysl mít tam ty Windows a nainstaloval bych na ten počítač rovnou Linux a spouštěl Docker kontejnery z něj.

K původní otázce – z uživatelského pohledu je Docker něco na půl cesty mezi běžným spouštěním procesů v operačním systému a virtualizací. Jednotlivé procesy jsou oddělené více, než běžně v systému, ale není to úplně nový spuštěný operační systém s vlastním jádrem, jako v případě virtualizace.

Z technického hlediska je to tak, že na linuxu dříve všechny procesy sdílely ten stejný prostor. Tj. jeden proces viděl to samé, jako kterýkoli jiný proces – stejné procesy, stejné uživatele, stejná síťová zařízení, stejný souborový systém. Pak se do jádra postupně implementovaly jmenné prostory – vzájemné oddělení procesů, kdy ty procesy můžete seskupovat do skupin, v dané skupině vidí ty procesy to samé, ale může to být něco jiného, než vidí procesy v jiné skupině. Můžete třeba síťovou kartu a její IP adresu vyhradit tak, aby jí viděla jedna skupina procesů, ale jiná skupina o ní vůbec nebude vědět. Třeba takhle můžete nějaké skupině procesů úplně zakázat přístup na internet, protože nebudou mít ve svém prostředí žádnou síť. Ale jiné procesy v tu samou chvíli normálně síť uvidí. Podobně je to s viditelností dalších zdrojů – jiných procesů, uživatelů apod. Všechny procesy tedy sdílí stejné běžící jádro (což je rozdíl oproti virtuálním počítačům), ale na úrovni jádra jsou více či méně oddělené. Celé tohle se v Linuxu nazývá cgroup.

Takhle jste si tedy mohl v linuxu spustit proces (nebo jejich skupinu), které byly více či méně oddělené od ostatních procesů. Musel byste si ale vše nakonfigurovat ručně. Vznikaly různé nástroje, které tu konfiguraci usnadňovali. No a Docker přišel s tím, že tohle vzal a zabalil do úhledné krabičky s mašlí. Definoval formát, v jakém si stáhnete už připravený balík programů, před spuštěním vše nakonfiguruje tak, aby jeden ten balík programů běžel odděleně od ostatních, a předchystal způsoby, jak to oddělení procesů někde cíleně narušit – protože typicky nepotřebujete, aby program běžel úplně oddělený od všeho ostatního, ale potřebujete s ním mít třeba společnou síť nebo osuborový systém.

Nebo-li Docker udělal to, že vzal nízkoúrovňové technologie umožňující spouštění procesů pod linuxovým jádrem v oddělených prostorech, a udělal kolem toho nástroje, aby se to dalo snadno používat. Procesy běžící v Dockeru tedy běží pod stejným jádrem, jako zbytek systému, ale běží v uzavřeném prostředí, takže ze jejich pohledu to vypadá, jako by měly celý systém jenom pro sebe a nebylo tam nic jiného.

Pozor na to, že tím, že Docker se snaží, aby ta technologie byla co nejsnáze použitelná, do toho oddělení skupin procesů záměrně zavádí různé díry, které umožňují s tím lépe pracovat. Jenže šikovný útočník se díky nim často může dostat mimo ten uzavřený systém. Tj. na programy spuštěné v Dockeru je potřeba se dívat tak, že jsou oddělené od zbytku systému pokud se chovají slušně. Ale to oddělení není neprostupné, pokud se na to někdo bude snažit zaútočit. Z tohoto pohledu by měl být o něco bezpečnější Podman.

Kubernetes je pak jeden ze správců sloužící k managementu velkého množství (desítek, stovek) běžících Docker kontejnerů na mnoha počítačích najednou.

alex6bbc

  • *****
  • 1 450
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #4 kdy: 20. 01. 2024, 20:21:01 »
docker na windows muze pouzivat i hyper-v techonoligii.

https://blog.kubesimplify.com/understanding-how-containers-work-behind-the-scenes


Re:Čo je docker?
« Odpověď #5 kdy: 20. 01. 2024, 20:54:54 »
docker na windows muze pouzivat i hyper-v techonoligii.

https://blog.kubesimplify.com/understanding-how-containers-work-behind-the-scenes
Ano, to je ta virtualizace, kdy pod Hyper-V virtualizací běží linuxové jádro.

bakalakadaka

Re:Čo je docker?
« Odpověď #6 kdy: 20. 01. 2024, 21:14:18 »
spomenul som si na toto video https://www.youtube.com/watch?v=HPuvDm8IC-4

Re:Čo je docker?
« Odpověď #7 kdy: 20. 01. 2024, 21:44:12 »
Kedze pises o .NET aplikaciach, tak je to nieco velmi podobne. predstav si linux, ako aplikaciu, v ktorej mas niekolko namespace. Teda vsetky vyuzivaju spolocny zaklad, ale zaroven mas ako keby samostatne krabicky, ktore funguju len v tom svojom priestore (namespace).
oproti virtualu teda nevytvara dalsi stroj, ale len izoluje krabicky medzi sebou.
PS: .NET 6.0 a vyssie vies priamo spustat aj v linuxe, nepotrebujes mat windows stroj. aj ked zalezi, co vsetko dany projekt vyuziva. Ja mam zatial doma vyskusane konzolovky, ktore maju v sebe nejake tie thready a websocket, pripojenie na db a vyzera to celkom stabilne. Aktualne mam rozbehany aj asp.net, kde samotna apka bezi lokalne a apache robi len proxy na tu apku.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #8 kdy: 20. 01. 2024, 22:42:42 »
Hodne zajimavych a celkem srozumitelnych prednasek na tema Dockeru (a kontejneru obecne) probehlo na InstallFestu. Namatkou dve z nich, ktere by - dle meho nazoru - celou problematiku mohly solidne osvetlit (a jako bonus, hezky cesky ;-) ) :
Docker pod kapotou, aneb jak si udělat vlastní kontejner - Jan Seidl - https://youtu.be/sY4yNXIhiTw?si=GEgf2OTMAuHYuoUZ
Docker pro neznalé (Václav Pavlín) - https://youtu.be/A1nngnx8WDg?si=L-d-2Xc-bLljLfvN

Doufam, ze zas nejdu s krizkem po funuse, jak je posledni dobou mym dobrym zvykem. :-D

Mlocik97

  • *****
  • 837
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #9 kdy: 20. 01. 2024, 23:33:59 »
Docker je aplikačný kontajner. Aplikačný kontajner sám o sobe je skvelá vec. Docker ale nie. Docker je deravý a zastaralý. Lepšie je použiť Podman.

Aplikačný kontajner je ako už tu bolo povedané, technológia, ktorá umožní beh skupiny aplikácií nad rovnakým jadrom ale izolovane tak, že nevidí iné procesy systému, a prípadne ani určité IO a podobne, v závislosti od nastavenia.

Avšak nepovedal by som že je to na pol cesty medzi virtualizáciou a normálnym behom... totiž existujú ešte aj systémové kontajnery, a až potom je virtuálky.

Re:Čo je docker?
« Odpověď #10 kdy: 21. 01. 2024, 00:56:38 »
Docker je aplikačný kontajner. Aplikačný kontajner sám o sobe je skvelá vec. Docker ale nie. Docker je deravý a zastaralý. Lepšie je použiť Podman.

Odpovědi "XYZ je ošklivé protože se mi nelíbí a není dostatečně cool protože cool je teď ABCD" opravdu miluju. Jestli je "děravý" nedovedu posoudit, ale nic jako "zastaralý" neexistuje. Ostatně pro většinu nasazení je mezi Dockerem podporovaným a popsaným kde všude a Podmanem o kterém většina lidí ví možná to, že existuje prakticky nulový rozdíl. Tedy kromě toho, že k tomu prvnímu není problém trivialně najít support celkem k čemukoliv, s čím má člověk problém.

Ach jo.

Mlocik97

  • *****
  • 837
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #11 kdy: 21. 01. 2024, 10:22:53 »
Docker je aplikačný kontajner. Aplikačný kontajner sám o sobe je skvelá vec. Docker ale nie. Docker je deravý a zastaralý. Lepšie je použiť Podman.

Odpovědi "XYZ je ošklivé protože se mi nelíbí a není dostatečně cool protože cool je teď ABCD" opravdu miluju. Jestli je "děravý" nedovedu posoudit, ale nic jako "zastaralý" neexistuje. Ostatně pro většinu nasazení je mezi Dockerem podporovaným a popsaným kde všude a Podmanem o kterém většina lidí ví možná to, že existuje prakticky nulový rozdíl. Tedy kromě toho, že k tomu prvnímu není problém trivialně najít support celkem k čemukoliv, s čím má člověk problém.

Ach jo.

A ja zas milujem keď si človek domýšľa... kde som písal že Docker nemám rád? A nie, Podman nie je o tom že je "cool"... akurát som nemal potrebu zopakovať čo už Jirsák správne popísal... je všeobecne známe že už od designu a spôsobu akým Docker funguje je deravejší. Áno, plusy Dockeru je lepšia dokumentácia a podpora. Navyše to problém u Podman až taký nie je, keďže väčšinu API kopíruje od Dockeru. Ale technológia ako taká je u Dockeru zastaralá. A termín "zastaralá technológia" existuje. Či mi chceš povedať že Win95, Ubuntu 6.04. alebo NetScape prehliadač nie sú zastaralé?

Ach jo.
« Poslední změna: 21. 01. 2024, 10:24:44 od Mlocik97 »

Jose D

  • *****
  • 856
    • Zobrazit profil
Re:Čo je docker?
« Odpověď #12 kdy: 21. 01. 2024, 12:13:18 »
Docker je deravý a zastaralý. Lepšie je použiť Podman.

No, k tomu je nutný poznamenat, že to je možná daň za to, že Docker přišel hodně brzo, a začal se používat i jako náhrada orchestračních nástrojů ( které v té době moc nebyly).

Ve své době, když přišel se Swarmem, tak to pro mě bya jeden z prvních nástrojů tohodle typu.. Ale převálcoval to nakonec Kubernetes, snad díky tomu, že Google si mohl dovolit to dotáhnout a naopak Docker, jako firma to neuměla natlačit ve velkém. (já snad mám dojem, že nějaké části byly placené(?))

Podman přišel oproti Dockeru později. A ano, některé koncepční věci má líp, snad kvůli absenci nutnosti zpětné kompatibility? Nevím.

bakalakadaka

Re:Čo je docker?
« Odpověď #13 kdy: 21. 01. 2024, 13:40:13 »
skusil som podman desktop, nie je tam moznost nastavit svetlu temu, tak to islo hned prec. nepotrebujem ani vediet o tom projekte viac ked taketo zakladne veci nevedia poriesit.

alex6bbc

  • *****
  • 1 450
    • Zobrazit profil
    • E-mail
Re:Čo je docker?
« Odpověď #14 kdy: 21. 01. 2024, 17:48:49 »
skusil som podman desktop, nie je tam moznost nastavit svetlu temu, tak to islo hned prec. nepotrebujem ani vediet o tom projekte viac ked taketo zakladne veci nevedia poriesit.

a kdyby se to ovladalo v prikazove radce, tak uz by to byl uplne jiny vesmir :-D