• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    ADM
    ADM --- ---
    URPUTNIK: pokud vis, jak ten image otagujes nasledne, udelej to rovnou v build stage, jinak budes mit po naslednym pretagovani v local images 2 image, coz uz budes muset zbytecne nejak resit treba pri mazani.
    pokud ti jde o to, jak unikatne tagovat image a je tam moznost ze se buildi zaroven stejny image na nejakym CI systemu, tak pouzij treba git commit hash, nebo vetsinou mas z CI nejaky unikatni build id, apod.
    tam kde se builduji image je vetsinou neschranujes, takze veskery mezikroky mezi build, push, a pak nejakyho naslednyho mazani local images (treba na zaklade stari) jsou vetsinou zbytecny
    URPUTNIK
    URPUTNIK --- ---
    ahoj, mam dotaz, jak tagujete image? nemyslim tim vycet tagu, ale jak to provadite? jako parametry do docker build? nebo delate cely scenar, tzn 'docker build, docker images | grep, docker tag'?

    ten scenar mi prijde prehlednejsi (misto nekonecnyho docker build radku), ale resim, jak spravne identifikovat ten cerstve vyrobeny image .. ono to totiz muze byt soucast nejaky CI pipeline, takze tam tech imagu bude videt vic, muze se jich nekolik buildit paralelne atp, takze se neda spolehnout na latest .. a tak mne napadlo, ze si pred spustenim docker build vygeneruju unikatni hash, jim to otaguju zaroven s buildem, a pak tenhle hash pouziju pro filtrovani v 'docker images' .. je to nesmysl? da se to udelat jednoduseji? pac takhle mi to bude do privatni repo sypat i ten unikatni tag, ne?
    RAGNAROK
    RAGNAROK --- ---
    RAGNAROK:
    uz asi vim musim pouzit funkci:
    ips, err := net.LookupIP("receiver")
    RAGNAROK
    RAGNAROK --- ---
    ADM
    delam to v go:
    potrebuju nejak dostat adresu do funkce net.WriteToUDP(b []byte,addr *UDPAddr).
    Zkousel vsechno mozny porad mi to psalo write udp [::]:3000->%UDP:2000: sendto: cannot assign requested address"
    ADM
    ADM --- ---
    RAGNAROK: ano, stalo by za to hodit si tam explicitne networks (kdyz nepouzijes, melo by byt implicitni, ze se vytvori bridge network, kde jsou vsechny sluzby z konkretniho docker compose). na ty ip adresy z toho prikladu zapomen, staci ti pouzivat pro komunikaci mezi kontejnery dns servicename
    ADM
    ADM --- ---
    RAGNAROK: zajisti si, aby receiver poslouchal na wirldcard IP, pak se k nemu sender pripoji normalne na 'receiver:port'. links vyhod, ports vyhod taky, pokud teda nepotrebujes pristupovat na receiver odjinud nez ze sender.
    RAGNAROK
    RAGNAROK --- ---
    ADMIX:
    tak jsem objevil toto a maka to :-D konecne:
    Alejandro Celaya | Blog — Software development, agile methodologies and open source projects
    https://blog.alejandrocelaya.com/...c-ip-addresses-to-docker-containers-created-with-docker-compose/
    ADMIX
    ADMIX --- ---
    RAGNAROK: na tohle je obecne nejlepsi mit nejakej MQ broker mimo, ale v tvym pripade bych rek ze potrebujes bridge a ne localhost, pac ty kontejnery localhost nesdili
    RAGNAROK
    RAGNAROK --- ---
    Zdravim nemuzu prijit na to jak nastavit sit pro 2 kontejnery ktere mezi sebou komunikuji pres UDP:
    Container sender posila UDP packety ktere by mely dojit k Receiver conteineru. Receiver by mel prijmout packet a odpovedet na adresu ze ktere prijmul UDP packet. Kdyz pustim obe apky bez dokru tak to funguje. Kdyz napisu apku, tak ze receiver a sender jsou v jedne apce tak to funguje. Kdyz je ale poustim zvlaste v dockeru s nasledujicim docker-compose tak sender posila UDP na adresu 127.0.0.1:3000 ale receiver nic neprijme. Nevedel by nekdo prosim?

    
    version: '3'
    services:
      receiver:
        image: receiver:latest
        environment:
          Laddr: "127.0.0.1:3000"
        ports:
          - "3000:3000/udp"
        links:
          - sender
    
      sender:
        image: sender:latest
        environment:
          Laddr: "127.0.0.1:2000"
          Raddr: "127.0.0.1:3000"
        ports:
          - "2000:2000/udp"
    
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    ADM: díky za postrčení, byl jsem unavenej a nedošlo mi, že jsou jednodušší cesty jako třeba bind portu... :-)
    ADM
    ADM --- ---
    MLEKAR_STEIN: o co presne ti jde? do kontejneru forwardujes z hosta port, to standardne zajistuje docker-proxy, ktery ten port binduje na hostovi a portforwarduje sluzbe v kontejneru, a muzes si urcit i na jakym IP rozhrani, a nebo si muzes sluzbu v kontejneru rovnou bindnout na host port a obejit docker-proxy, pokud pouzijes network host mode
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    dotaz k sítím v dockeru v compose.
    verzi dockeru mám poslední, compose taky.

    dostal jsem za úkol, jako nouzové řešení
    udělat aby kontejnery byly vidět na vnější adrese serveru v rozsahu, ve kerém ten vnější adaptér serveru je.
    není mi moc jasné, jak na to vytvořit "bridge síť" nebo jak jinak se s tím poprat.

    díky moc.
    RUDOLF
    RUDOLF --- ---
    ADM: jj, ve swarmu slouží healthcheck jen jako indikátor, zda má swarm kontejner restartovat. That's all. Žádnou cross container logiku bych tímhle neřešeil.
    ADM
    ADM --- ---
    RUDOLF: jasne, ja tam nakonec dam nejaky shell healthcheck renatomefi/php-fpm-healthcheck (pouziva fastcgi binarku), akorat me zarazilo ze v single docker-compose to funguje (a je to defakto lepsi healthcheck, protoze je to vlastne nadmnozina co do testovanych podminek), ale to je jen takovy vedlejsi efekt.

    bohuzel ve swarm mode je pokud to dobre chapu mozny healthcheck jen na localhost (dns name neni zaregistrovan dokud neprojde healthcheck), coz je takovy dost ... no .. ne uplne idealni, oproti kubernetes, kde jsou rovnou 2 typy healthchecku a hlavne jsou z hlediska containeru externi.
    RUDOLF
    RUDOLF --- ---
    ADM: nejsme stopro jistej, jestli jsem tě dokonale pochopil, tak odpověď podle toho vypadá.

    ve swarmu healthcheckuju jen sám sebe (tj. localhost), je tam možnost i delayed healtchecku, než to všechno naběhne.. logika je v tom, že swarm restartuje jen kontejner, který healtcheckuje..

    ad nginx a upstream služeb, správné je používat hostnames - defaultně je to název služby v compose definici a pak ještě můžeš přiřadit aliasy..
    ADM
    ADM --- ---
    nejak se nemuzu vymotat ze zavislosti v docker swarm modu, modelovy priklad, fungujici v single docker-compose:

    mam v docker-compose 3 sluzby, nginx http frontend a 2 php fcgi backendy. z hlediska komunikace jsou hostnamy jmena tech sluzeb, dejme tomu service-http, service1-php a service2-php, kvuli healtcheckum tech php-fpm sluzeb a taky kvuli tomu ze ty php-fpm mohou komunikovat uvnitr mezi sebou navzajem pres http, ma nginx frontend na sobe jeste network aliasy service1-http a service2-http.

    na php-fpm sluzbach je healthcheck jako GET http://service1-http/, tedy taze se sam sebe pres ten nginx fontend (ktery pro service1-http pouzije fcgi backend ten ktery se pta, tedy service1-php:9000). potud vse funguje v single docker-compose, ovsem ve swarm stack modu stejna kompozice nefunguje, protoze service1-php se do interniho dns dostane az v okamziku, kdy projde healthcheck, ktery samozrejme neprojde, protoze nginx na nej nevidi, dokud neni v dns.

    neprisel jsem na to co s tim, snad nahradit ten healthcheck necim co pobezi v ramci localhostu pouze pres fastcgi, ale neni to uplne idealni. pouzit v ramdi definice network v docker-compose ip adresy natvrdo taky neni mozny, nginx si pri startu kontroluje vsechny upstream definice a kdyz nebezi, tak uz je neservicuje, proto se jako adresy upstream fastcgi pouziva hostname
    WOODMAKER
    WOODMAKER --- ---
    WOODMAKER: jo, tak ta poslední věta není tak úplně pravda, fakt doporučuju si přečíst todle: WOODMAKER
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    URPUTNIK: to s tim klonem repo, dělám to tak, že mám nadefinovaný, že se mi má vyklonovat repo, m8m to v jenkinsu, takže v Jenkins file, ale může to být klidně ve scriptu, a pak z něj do docker image nakopíruju co potřebuju,
    A specielně na tohle mi přijde vhodný multistage build. kde si napřed udělám build jedné image, kde se něco kopíruje, dělají kouzla se scripty a tak. a pak, v tomto případě výsledné přeložené cosi vykopíruju v dalším stage.
    a předpokládá to, že to má nějaké předpřipravené image, ve kterých se to všechno provádí.

    příklad

    FROM example.com/debian:build as BUILD

    ENV WRK=/here/is/wrk
    RUN mkdir -p $WRK/REPO
    COPY /repo/somewhere $WRK/REPO
    RUN somebuildscript.sh

    FROM mydomain.test/docker/runimage:7.5.2-stage

    COPY --from=BUILD /build/path/to/binary /target/path/

    EXPOSE 16666

    ENTRYPOINT ["/docker-entrypoint.sh"]
    CMD ["parameter"]
    ADM
    ADM --- ---
    URPUTNIK: nevim jaky zmeny ve skutecnosti predstavuje ten 'lokalizovany' image, ale snazil bych se co nejvic drzet jen jedinou verzi image, a v runtime ty image pak vybrat konkretni lokalizovanou verzi treba podle env promenny.
    samozrejme pokud jednotliva lokalizace neznamena vyrazny rozdil ve velikosti image pokud bys mel vsechny lokalizace nacpat do jedny
    Kliknutím sem můžete změnit nastavení reklam