• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    Docker aneb přístupný provoz kontejnerizovaných aplikací
    Docker(Hub), Compose, Swarm, boot2docker, DevOps, LXC, ECS, TumTum a jiné buzzwordy
    Bezpečnost v prostředí kontejnerů
    Related: automatizace [ Centralizovaná správa stanic a ostatních prvků v síti konfigurace/inventarizace/instalace/aktualizace/zalohovani ]
    rozbalit záhlaví
    REFLEX
    REFLEX --- ---
    JON: jezis no jo vlastne, tak pojedu .localhost nebo .loc
    JON
    JON --- ---
    REFLEX: to bych nedoporucoval, od nejaky doby je .dev regulerni top level domena: https://en.wikipedia.org/wiki/.dev
    pekne curacky rozhodnuti, co vam budu povidat
    REFLEX
    REFLEX --- ---
    VELDRANE: to je zajimave, tak mozna prejdu na .dev :D
    VELDRANE
    VELDRANE --- ---
    REFLEX:

    matne si ted vzpominam, ze tak cca 5 let zpatky, zacal bejt problem s domenama .local kvuli naky srajde v networkmanageru. Taky sem na to narazil, tenhle suffix byl kdysi doporucovanej pro lokalni domeny v ramci AD a ja to pak uz ze zvyku cpal vsude. Bylo z toho tenkrat z my strany ooavdu velky mrzeni a nasrani. Issue je popsama treba zde:

    Name Resolution Problems with ".local" Domains | Support | SUSE
    https://www.suse.com/support/kb/doc/?id=000016445
    MARTEN
    MARTEN --- ---
    REFLEX: osobne pouzivam *.vcap.me, vse smeruje na localhost a nemusim resit hosts. V kontejneru pak lezu podle nazvu containeru, takze treba na mysql. A pokud potrebuju neco manualnejsiho, tak je tam parametr extra_hosts
    REFLEX
    REFLEX --- ---
    DANIELSOFT: no jsem z toho zmateny, nechapu ze to tedy predtim slo :D (a bohuzel nemam moc cas to resit)
    DANIELSOFT
    DANIELSOFT --- ---
    REFLEX: bez toho, že zadáš "--network host" to /etc/hosts z hosta nebere

    můžeš vytvořit či modifikovat /etc/hosts uvnitř kontejneru nějak ručně (třeba echem) pokud ti nevyhovuje zadat "--network host" u Dockeru
    REFLEX
    REFLEX --- ---
    REFLEX: coz asi by default nedela, tak nechapu proc to najednou nejde :D
    REFLEX
    REFLEX --- ---
    Upgradoval jsem ubuntu na 22 na stroji na praci a prestal mi fungovat v kontejneru resolve na http://mujvyvoj.local/ coz smerovalo na muj stroj

    Tedy mel jsem v /etc/hosts zaznam a ten se nejak by default propisoval i do kontejneru, ale po upgradu to nejde, nevite co s tim?
    QWWERTY
    QWWERTY --- ---
    MORTAELTH: ad zestihlovani base image

    Using Alpine can make Python Docker builds 50× slower
    https://pythonspeed.com/articles/alpine-docker-python/
    MORTAELTH
    MORTAELTH --- ---
    nejlepsi na zrychleni buildu je zestihlit baseimage a nasledny pridavky do nej :) Jasny, ne vzdycky to jde, ale dat si "distroless" base image je dobry cil :)
    SH_PANDA
    SH_PANDA --- ---
    SH_PANDA: jsem vul - --add-host v docker build. ted uz jenom vyresit docker run - tam musim tu IP adresu :-/
    SH_PANDA
    SH_PANDA --- ---
    potrebuju zrychlit build kontejneru - velky context, caste rebuildy, tisice npm balicku.

    rozjel jsem si apt cacher https://docs.docker.com/samples/apt-cacher-ng/ a npm registry proxy ve https://verdaccio.org/docs/what-is-verdaccio v nejakem svem "registry cache docker compose" a ted bych je chtel pouzit v buildech kontejneru.

    zatim to resim pres ARG do ktereho poslu IP adresu docker hostu (ip addr show docker0)

    ale to mi prijde jako malo robustni. neresil jste to nekdo?
    VELDRANE
    VELDRANE --- ---
    Ahoj,
    je nejaka cesta treba pres pluginy jak rozsirit built in variables v Helmu ? A ted nemyslim pres samotny _helpers.tpl ale nakou casti kodu, ktera mi bude zavola nejakej command a na zaklade jeho vystupu mi nastavi nejakou buil-in promenou kterou pak se pak pouzije v nejake template ? Priklad:

    Mame k8s clustery, ktery maj ruzny verze a nak tery se ruzny aplikace instalujou jinym stylem. Potrebuju zjistit treba pres kubectl co to je za cluster a na zaklade neho si vyplnit promenny ohledne lokace image a dalsi veci. Myslel sem ze by to mohlo jit pres pluginy, ale z tech prikladu mi prijde ze ta ficura je pro neco uplne jinyho nez potrebuju.

    A dotaz cislo dve. Jde nejak bez nejakejch externich obezlicek vyplnit release.version na zaklade toho co je v gitu ?
    JON
    JON --- ---
    ADM:
    MLEKAR_STEIN:
    Dekuju za rady - zvysil jsem ty max pull a max push, pridal delsi timeout pro docker-compose a situace je vyrazne lepsi (i kdyz ne 100% dobra).
    Porad se obcas nektery docker-daemon zasekne na tom pushovani, ktere nemuze uspet, ale je to vyrazne vyrazne min - tj ted uz si dokazu predstavit, ze pro tuhle eventualitu tam budeme mit nejakej automatickej restart - a jeste zkusim trochu potunit ty parametry, aby to bylo ok.
    ADM
    ADM --- ---
    JON: kdysi jsme resili podobny problem s tim, ze docker-registry proste nestihal vic simultanich push pull image (tech deploymentu bylo hodne a casto se to proste seslo) a koncilo to timeoutem. uz si nevzpominam jak se to vyresilo, to znamena, ze asi nejak standardne zvysenim limitu (a nebo to byl primo nejaky problem s limity v bamboo, ktery buildoval a pushoval). vas problem vypada jinak, ale na docker-registry bych se urcite podival. ssd jak tu nekdo zminoval na vytizenejsich /var/lib/docker to potvrzuju
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON:

    pokud to je tak, ze selze ten push a zaloguje to tyhle dve hlasky, a ta failed mount je tak trochu matouci
    tak me napada v konfiguraci docker registry
    storage:
      filesystem:
        rootdirectory: /var/lib/registry
        maxthreads: 100
    zvysit maxthreads: 100 treba na 300
    Configuring a registry | Docker Documentation
    https://docs.docker.com/registry/configuration/

    pokud je to obracene, tak nevim, muze byt nekde omezeny pocet otevrenych souboru?

    a kdyz tak nad tim premyslim, tak bych tak jako tak zvysil maxthreads v registry a
    v dockeru na masine kde se to buildi max-concurrent-downloads na treba 8 a max-concurrent-uploads na 10

    --max-concurrent-downloads int Set the max concurrent downloads for each pull (default 3)
    --max-concurrent-uploads int Set the max concurrent uploads for each push (default 5)
    dockerd | Docker Documentation
    https://docs.docker.com/engine/reference/commandline/dockerd/
    JON
    JON --- ---
    MLEKAR_STEIN: diky za obsirne info - podivam se co by se mi mohlo hodit, ale nas problem mi prijde odlisnej:

    Akorat my to vsechno mame na NVMe diskach a ve chvili, kdy je docker daemon neschopny pushovat (opravdu je neschopny docker demon, ne compose, zkusil jsem to na tom stroji pres `docker push`) tak tam uz zadny kontejner nebezi treba nekolik hodin.
    Restart celeho stroje nebyl nikdy potreba, staci `systemctl restart docker`. :(

    stav se bezpecne pozna podle toho, ze `journalctl -u docker` se porad plni hlaskama jako tato:
    Jun 21 09:24:46 runner6 dockerd[1280290]: time="2022-06-21T09:24:46.476585833Z" level=info msg="failed to mount layer sha256:649677b0b4a4f861845499fd7c06dbccce5445a3eb931d146da3c01c1ec216c3 (sha256:d9596064
    beeaf2e31c97a60091a5443eb7e68b3ad568e1067345db51b417d48c) from docker.nase.domena/skupina/projekt/buildovaci-image: Post \"https://docker.nase.domena/v2/skupina/projekt/jinej-image/blobs/uploads/?from=skupina%2Fprojekt%2Fbuildovaci-image&mount=sha256%3Ad9596064beeaf2e31c97a60091a5443eb7e68b3ad568e1067345db51b417d48c\": unauthorized: HTTP Basic: Access denied"
    Jun 21 09:24:47 runner6 dockerd[1280290]: time="2022-06-21T09:24:47.096387050Z" level=error msg="Upload failed: unauthorized: HTTP Basic: Access denied"
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    RATTKIN: jo, nam to hodne pomohlo.
    a nepouzivat compose pro docker push a docker pull.
    a pokud ma nekdo naladu, tak stoji za to, pohrát si s temi parametry vm.*
    RATTKIN
    RATTKIN --- ---
    MLEKAR_STEIN: takže TL_DR všude mít SSD?
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON:
    1. udelal jsem zkusenost, ze docker ma problem s IOPS na diskove operace. /var/lib/docker by melo byt na ssd disku. a to i v pripade, kdy se na stroji nepouzivaji volumes pro persistentni data.
    jako best practice bych pridal, ze pokud mam vetsi mnozstvi volumes, ktere neco delaji, treba mam elastic a generuji indexy, tak je dobre mit volumes na vlastnim disku. to se da resit bud symlnkem, nebo pomoci direktivy bind v /etc/fstab

    2. docker-compose ma timeout na vlastnim dockeru, povazuji za hodne nepravdepodobne, ze by to melo trable kvuli registry, kam se to pushuje, pokud to registry neni na stejnem stroji.
    timeout se da nastavit promennou COMPOSE_HTTP_TIMEOUT.
    Viz https://docs.docker.com/compose/reference/envvars/
    trochu to pomuze, chcipne to o par minut pozdeji

    3. je nejakej trabl v komunikaci compose a docker daemona, uz docela dlouho, chovani je takove, ze compose uz nereaguje a zaroven docker docela v pohode funguje. kdyz tohle nastalo, tak jsem opravdu nikdy nemel cas pustit strace abych zjistil, ktere volani v compose blbne. :)
    da se to nasimulovat pomoci nekolika elastic serveru, ktere generuji indexy a elastic data volumes lezi vsechny na jednom tocivem sata disku spolecne ve /var/lib/docker. :D
    doporucuji pouzivat "docker push" misto compose.


    4. runnery - umiraji na iops. klinicky jsem otestoval na serveru s 15k SAS disky. kdyz se jich pusti vetsi mnozstvi, tak to na tocivych discich chcipne. plati pro ne to same, co pro vsechny docker kontejnery a /var/lib/docker. radeji na levnejsim SSD nez na drahem SAS. delalo to uz pred par lety. kdyz se pustilo nekolik vetsich kompilaci v C++, hromada malejch blbosti a par kompilaci javy tak to chcipalo uz na gitlab 12-13.
    kompilace zerou disky :D

    5. vec, ktera umre na iops se obvyukle sama od sebe nikdy nevzpamatuje a zustane v ni nejaky proces v D stavu, Uninterruptible Sleep, kdy ceka na IO. neda se s tim delat vubec nic, krome restartu stroje, v pripade dockeru restartu kontejneru. protoze v tomhle stavu to nereaguje na zadny signal.

    6. podle popisu bych tipoval, ze se pokousi cist layers ze socketu a zaroven bezi nejaka kompilace a umre to na IOPS..

    7. mozna reseni.
    dat tam ssd disk pro /var/lib/docker
    zkusit si pohrat s parametry vm.dirty_background_ratio, vm.dirty_ratio
    nejaky info je na strance u glusterFS, https://docs.gluster.org/en/main/Administrator-Guide/Linux-Kernel-Tuning/
    pripadne neco dalsiho, co me ted nenapada a ani nejsem schopnej nejak rychle najit.
    Kliknutím sem můžete změnit nastavení reklam