• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    URPUTNIK
    URPUTNIK --- ---
    ONLINEQUE: disclaimer, jsem dlouho vyvojar a castecne uz fusuju i k adminum (protoze nasi admini se virtualizace boji) .. troufam si tvrdit, ze "developeri jsou lenivi" je hodne zjednodusene videni sveta, ktere Ti asi moc nepomaha, ne? dovedu si predstavit a zcela chapu, ze to bude platit v "nizsich urovnich" hierarchie, protoze jsou to juniori a maji uplne jine problemy a jinou perspektivu .. ale technicky dluh je problem stejne tak administratoru, jako vyvojaru, takze u nas treba tohle pada na hlavu seniornich programatoru ..

    vize, kterou mame o tom, jak to adminum predame, je, ze si programatori reknou 'parametry', ktere ten image musi splnovat (aka musi tam byt napr JAVA_HOME, musi tam byt nahrane JDK 8+ na ktere JAVA_HOME ukazuje, a instalovane ssh + curl a verejne certifikacni autority, a uzivatel musi mit nahrany konkretni ssh klic) .. senior vyvojari pak vyjdou z takoveho image, nahraji si tam treba AS (tomcat, wildfly, nastavi ho aby se spoustel, atp) .. a tim vznikne "dev base image" ktery pouzivaji juniori, protoze tam maji to co potrebuji, jen si tam mountnou treba adresar se zdrojakama, rozsiri si ho o debug nastroje atp .. do produkce ale pujde ten baseimage od seniora s otestovanou a otagovanou verzi ..
    ADM
    ADM --- ---
    HOUMLES: ono to ani nedava smysl treba v kubernetes, tam se vsechny kontejnery restartem mazou, a upravu kodu v bezicim kontejneru bez restartu stejne neudelas (jen kdyz tam mas nejakej pid 1 proces manager). use case stateful kontejneru neznam (datova persistence je neco jinyho)
    ONLINEQUE
    ONLINEQUE --- ---
    Diky vsem za prinosnou debatu ;-), tim jsem asi tema vycerpal ;-}
    HOUMLES
    HOUMLES --- ---
    ADM: aha, tak ok, ja to tak z toho tvyho textu pochopil :)
    ADMIX
    ADMIX --- ---
    ONLINEQUE: hele je to tak, zvlast pokud potrebujete veci ktery se blbe automatizujou. V my aktualni praci mame problem "podobnej" a realita je takova ze jsem na to tymu napsal sadu fire-and-forget utilitek, ale tu posledni mili s commitem do interniho repa proste musi udelat nakej clovek. Dulezity je mit na to dobrej proces a zbavit se veci co trvaji a jsou otravny, a pak to proste brat jako development effort.
    ONLINEQUE
    ONLINEQUE --- ---
    ADMIX: ale jo, to asi zni rozumne. Demokracie je v takovym pripade nepouzitelna ;-)
    ADMIX
    ADMIX --- ---
    ONLINEQUE: Budto na to mate automation (jakoze nightly upstream sync) a nebo na to mate cronjob co kazdou druhou nedeli udela ticket nahodny obeti a nezavre ho dokud obet nereleasne novej image :)
    ONLINEQUE
    ONLINEQUE --- ---
    ADMIX: ted se asi chytam v pohode;
    jasne, tak to i pouzivam, mam jakysi base image, ktery pak pouzivam dal.
    Situace je pomerne velmi jednoducha, existuje jeden base image z ktereho je postaveno par kontejneru.

    Jen porad mi neni jasne, jak to bude resit muj problem s tim, aby to vevnitr bylo aktualni. Spolehat se na to, ze lenivi developeri neco nekdy udelaji - tak to moc nelze; developerum je u prdele, ze to, co tam jede, je zastaraly, jde jim primarne o vlastni pohodli, co si budeme nalhavat. Resi si jen svuj pisecek (coz castecne i chapu)

    Takze je jednak potreba, at uz behem buildu nebo tak, ze se zkontroluje bezici prostredi - zjistit, ze neco neni aktualni a vyreportovat to v dostatecne nahlas tak, aby se to nasledne vyresilo.
    ADMIX
    ADMIX --- ---
    ADM: tak to si rozumime :D
    ADM
    ADM --- ---
    ADMIX:
    HOUMLES:
    tak priznam se, ze varianta ze by to nekdo delal v bezicim kontejneru, me vubec nenapadla kvuli tomu ze to je nesmysl, myslel jsem samozrejme v build imagi
    ADMIX
    ADMIX --- ---
    ONLINEQUE: tak nejjednodussi priklad je, ze mas proste userland se vsim vsudy, kterej si buildis jednou za tejden z upstream repa, co si natahne par RPM, nejaky pip moduly a nasere nejaky veci do /etc: base-os:latest, base-os:20200610
    a pak mas tu samotnou aplikaci, ktera ty veci pouziva, ktera se buildi v CI, treba app:latest, app:commitId

    ted nevim jak je to v dockeru, FROM?
    v aplikaci mas v repu docker file kterej zacina FROM base-os:20200610 a ten ti buildi po kazdym commitu app:latest kontejner, kterej pokazdy pouziva ten samej base-os (takze ten nacachujes jednou a pak uz jen updatujes ten app)

    a jednou za tejden, za mesic, nebo kdyz se to developerovi chce delat, tak udela commit co updatne tu app FROM dependency na FROM base-os:20200714, a tenhle novej chain pak prozenete testama apod.

    To je takovej nejjednodussi priklad multistage buildu kde si drzis platform image nezavisle od aplikace, a aplikace si definuje ten FROM base image, na kterym pak certifikujete/testujete/rolujete.
    V zavislosti na tom jak vase appka vypada se to da rozbit do mnohem vic komponent, muj priklad z $job-1 byl
    - base-os
    - custom interpreter
    - proprietary set of libraries
    - app-common
    - per-daemon code

    ten per-daemon code mel jako dependency konkretni verze app-common, libs a interpreteru a interpreter/libs mely base-os. Tohle vyzaduje dobrej release management, jinak se z toho diagramu poserete :D
    ONLINEQUE
    ONLINEQUE --- ---
    ADMIX: muzes dat nejakej konkretni priklad toho, jak tohle myslis, a jaky dusledek by to pak melo pro to upgradovani ? U tyhle myslenky se mozna uplne nechytam, dik.
    ADMIX
    ADMIX --- ---
    ONLINEQUE: zkusil sis rozepsat strom zavislosti a podle toho se podivat jestli muzes verzovat zavislosti a ty finalni kontejnery upgradovat podle toho?
    ONLINEQUE
    ONLINEQUE --- ---
    HOUMLES: tak to bylo mysleno, vybuilduju si image tak ze do nej behem buildu vrznu co potrebuju (at uz nejake "OS" balicky navic, plus PIPem to, co je treba pro python kod. Jakmile vybuilduju, tak uz nesaham na to, co je vevnitr. Berme jako fakt, ze kontejner, ktery se jednou pusti z image, uz se dal nebude modifikovat. Tenhle problem tu neresim ;-). Resim to, jak zajistit, aby bezici kontejner byl up-to-date, resp. abych zjistil dostatecne vcas, ze tomu tak neni a mohl ho pripadne znovu rebuildovat.
    ADMIX
    ADMIX --- ---
    ADM: Problem kontejneru ktery si muzes menit je, ze ti vytvari heterogenni prostredi a hrozne blbe se pak hledaj rozdily a problemy.
    Pro development, whatever. Ale pokud jdes do nightly runu (a dal) s tim, ze si postavis container stack a pred startem aplikace tam musis na cokoliv sahnout (as opposed to just injecting configuration from the driver), tak ten image neni udelanej spravne - IMHO. Jasne, da se to udelat spoustou veci, muj osobni nazor je ze pokud aplikacni kontejnery musis modifikovat za behu, zadelavas si na problemy v produkci :)
    HOUMLES
    HOUMLES --- ---
    ADM: "aplikacni kontejnery existuji prave od toho, aby se tam ten pip install, mohl delat"
    je to trosku slovickareni, ale pip install mam v dockerfilu a ten mi vybuildi image, potud ok ... kdyz ten image pak pustim tak mam kotejner a v nem uz se pip install fakt nepousti
    ADM
    ADM --- ---
    ADMIX: s tim nemuzu souhlasit, s tou tyci to plati pokud by delal nekdo pip install v OS, ale aplikacni kontejnery existuji prave od toho, aby se tam ten pip install, mohl delat (jinak bys musel cekat, az nekdo backportuje php/python/atd do balicku, pritom v pip apod. jsou stable verze ihned].
    takze zrovna v python projektu mas requirements soubor se zavislostma vcetne verzi, a v dockerfile jeden pip install, ktery jej pri buildovani image nainstaluje, vyvojar si to pak otestuje, a vysledkem je funkcni docker image, co vic si prat?

    ONLINEQUE: problem jsi popsal presne, neni mi znamo, ze by existovalo nejake reseni. jo mozna v komercnim docker supportu jsem videl neco jako ze v jejich verzi docker repository je nejaka security featura, kterou jsem si z marketingu prelozil jako ze to asi scanuje image na vulnerability, ci co. pak taky officialni vendori upstream images muzou garantovat aktualizace (image od redhatu napr.)
    ONLINEQUE
    ONLINEQUE --- ---
    ADMIX: ok, pokud budou potrebovat dostat do kontejneru nejakej kus pythonovskyho kodu se spoustou modulu, resis to jak ? Zbuildujes si po vlastni ose vedle toho OS balicky, pokud ty moduly v takovy podobe vubec neexistujou ?
    MUXX
    MUXX --- ---
    ONLINEQUE: Mam v planu zkusit toto: https://anchore.com/opensource/

    Ale nejsem si jistej jestli to je presne co hledas.
    ADMIX
    ADMIX --- ---
    ONLINEQUE: krok cislo 1, kontejnery jsou zasadne immutable a pokud ti v nich nekdo dela pip install, tak si najdi takovou tyc co budes nosit porad u sebe, a jak nekdo udela pip install, tak ho zabij :D
    Jedna cesta je mit base OS image (v zavislosti na tom co potrebujes to vetsinou bejva bare OS userland bez kernelu apod.) a tvuj release cycle pravidelne upgraduje zavislosti tech kontejneru (pocinaje nightly runs, pres QA/UAT, az po gradual prod rollout)
    Kliknutím sem můžete změnit nastavení reklam