• ú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í
    HVJ3R
    HVJ3R --- ---
    RUDOLF: ale i klasickej cron ti skripty bude poustet s cistym envem. Ja si vzdycky zasourcuju soubor s promennejma pro cron pred behem.
    RUDOLF
    RUDOLF --- ---
    RUDOLF: aha, ale iniciační skripty postgres nepustí, pokud není data dir prazdnz;-) .. takže prostě udělám vedlejší side kontejner, co to bude řešit a basta.. tak brou..
    RUDOLF
    RUDOLF --- ---
    RUDOLF: asi je čas jít spát, vůbec mi nedošlo že RUN service cron start mi cron nenastartuje;-) Ale postgres má nějaké inciační skripty, takže to bude v cajku;-) ale radši se na to vyspát..

    srry za samomluvu..
    RUDOLF
    RUDOLF --- ---
    RUDOLF: jo, fachá to.. udělat jsem ze secret shell script, kterej mi vyexportuje prostředí pro cron..

    zase trochu trablík, jak jsou ty secrets immutable.. od compose 3.5 je větší flexibility v pojmenování secrets.. tak asi napíšu něco na porovní hashe secretu a přidám to do pipeline..
    RUDOLF
    RUDOLF --- ---
    ADM: jo v tom image běží postgres + cron

    not good, not bad;-)
    ADM
    ADM --- ---
    RUDOLF: a jak spoustis crond v postgres:latest imagi? predpokladam ze v ni bezi postgres
    RUDOLF
    RUDOLF --- ---
    RUDOLF: jo, tak vyreším to přes docker secret;-) jdu na to
    RUDOLF
    RUDOLF --- ---
    češtík,

    mám postgres image s shellovým scriptem, který prdá encryptovanej dump na s3, pouštím ho cronem. Ale nějak to nefachalo. Image je postavený na klasickým postgres:latest.

    Došlo mi, že ten shell script potřebuje env proměné, které definuji runtime při spouštění docker image podle target prostředí.. tj. pokud se přihlásím přes docker exec, ty env jsou součástí shellu a skript pustím v pohodě.. ale ty env nejsou dostupné cron službě, když spouští ten skript, zdechne na nedefinovaných proměných..

    Asi bych mohl trapně dumpnut ty proměné do nějakého souboru a upravit skript aby si je načetl, ale nechci přepisovat CMD ani ENTRYPOINT toho postgresového image, je tam nějaká logika z toho zdrojového image..

    Asi na to jdu nějak špatně;-)
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    ADMIX: Slouží to pro spouštění SQL scriptů, kterými se "updatuje" databáze.
    Příklad:
    - jako vývojář u sebe na lokálu upravim databázi, např. přidám tabulku.
    - Vytvořim soubor např. patch-1.0.5.sql v určitym adresáři, do kterýho dám ty CREATE TABLE příkazy
    - Tento adresář s migračními scripty je součástí repozitáře
    - Na ostrých serverech se pak při spuštění kontejneru spustí ten můj migrační script. Ten mrkne, jestli existují nové soubory patch-*.sql, které ještě nespustil. Pokud ano, tak spustí a ostrou DB tak uvede do aktuálního stavu.

    Jako vývojáři totiž nemáme do ostré DB přístup. Navíc ty soubory s SQL jsou verzovány, takže je vidět kdo co udělal (podělal:) a řeší to i konflikty.
    ADMIX
    ADMIX --- ---
    SYNTAX_TERROR: Docela by me zajimalo co to vlastne dela, pac to zni jako zajimavej antipattern :D
    No judging, nektery obskurni usecases proste jinak nejdou, jen me to zaujalo
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    SYNTAX_TERROR:
    A jen si tu odložim řešení, třeba se bude někomu (mě v budoucnu) hodit:

    Dockerfile
    COPY ./docker-php-entrypoint /usr/local/bin/
    ENTRYPOINT ["docker-php-entrypoint"]
    CMD ["apache2-foreground"]
    

    docker-php-entrypoint
    
    #!/bin/bash
    
    set -e
    
    # first arg is `-f` or `--some-option`
    if [ "${1#-}" != "$1" ]; then
    	set -- php "$@"
    fi
    
    echo "Executing DB migration"
    php /var/www/html/bin/db-migration.php
    echo "Executed DB migration"
    
    exec "$@"
    
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    JON: jj, ale už to vyřešil devops kolega
    JON
    JON --- ---
    SYNTAX_TERROR: a jses si jistej, ze tu migraci chces spustet pokazdy?
    ADM
    ADM --- ---
    SYNTAX_TERROR: tak to napis hned, ze chces aby bezel apache. pokud potrebujes spustit nejaky php skript, tak jedine nejdriv ten skript, a pak apache. pouzijes vlastni entrypoint neco jako:
    ENTRYPOINT [ /bin/sh -c "php /svuj/skript && exec /puvobni/apache/entrypoint" ] (naformatuj si to spravne)

    v kubernetes bys na to pouzil post-start hook
    RUDOLF
    RUDOLF --- ---
    SYNTAX_TERROR: Takže jako pid 1 by měl běžet ten Apache, který servíruje to PHP. Srry víc nepomůžu, jsem na telefonu daleko od kompu.
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    RUDOLF: no, nejsem v dockeru moc zběhlej, takže nevim co myslíš tím `proces_ktery_pobezi_s_pid1_a_servuje_tvoji_appku`.
    Zkoušel jsem mj.:
    CMD ["php", "/var/www/html/bin/db-migration.php"] && tail -f /dev/null 
    Což radí internety, ale skončilo to stejně.

    Zkusil jsem na konci zavolat ještě
    CMD ["php", "/var/www/html/bin/alive.php"]
    kde alive.php je nekonečný cyklus. To sice kontejner neukončí (cyklus běží), ale zase se nespustil ten první db-migrations.php a Apache servica zdá se vůbec není spuštěná.

    Původní docker image je php:7.3.6-apache.
    RUDOLF
    RUDOLF --- ---
    SYNTAX_TERROR: S PHP jsem nedělal roky ale vynechal bych entrypoint a do cmd bych narval php migracni_skrip && proces_ktery_pobezi_s_pid1_a_servuje_tvoji_appku
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    Poradíte, jak po spuštění kontejneru spustit svůj php script?
    Zkouším to takto:
    ENTRYPOINT ["php"]
    CMD ["/var/www/html/bin/db-migration.php"]
    

    Ale to po doběhnutí php scriptu se stopne celý kontejner. To nechci, potřebuju, aby po dokončení toho scriptu kontejner dál běžel.
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    ahoj,

    hledám, jak nějak šikovně evidovat výsledky buildů jenkinsu,
    primárně mi jde o docker images, ale hodily by se mi to i na jiný věci.
    příklad:
    mám udělaný build image, celé se to jmenuje třeba nějak takhle:
    example.com/buster-servicedolly:version-stage-date
    a krátké jméno s example.com/buster-servicedolly:version
    version je něco jako 11.12.13
    stage obsahuje něco jako qa, prod, dev
    pojmenování mám více méně daný.

    jde mi o to, jak si tohle někde evidovat s dalšími informacemi, jako třeba jméno projektu, ve kterých dalších projektech se to používá atd,
    abych mohl mít nějaký systém, kjterej by mi pak generoval do helmu rovnou správná jména.

    existuje na to něco, nebo neexistuje?
    URPUTNIK
    URPUTNIK --- ---
    a dalsi :) dava tohle smysl? v ramci dockerbuildu, proti debianu8 z docker hubu .. proc mi to nevyrobi /gitrepo/somerepo/.git ?
    
    RUN set -eux ; \
        eval $(ssh-agent -s) ; \
        echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config ; \
        ssh-add /tmp/id_rsa ; \
        cd /gitrepo/somerepo ; \
        git init ; \
        git config core.sparseCheckout true ; \
        echo "/some-path" >> .git/info/sparse-checkout ; \
        git clone --no-checkout --verbose --depth 1 --single-branch ssh://prg@server-with-repo/opt/repo/somerepo;
    

    ve vysledku
    
    ---> Running in 817d61d8a823
    + ssh-agent -s
    + eval SSH_AUTH_SOCK=/tmp/ssh-gEyJjSc9nOsw/agent.6; export SSH_AUTH_SOCK; SSH_AGENT_PID=7; export SSH_AGENT_PID; echo Agent pid 7;
    + SSH_AUTH_SOCK=/tmp/ssh-gEyJjSc9nOsw/agent.6
    + export SSH_AUTH_SOCK
    + SSH_AGENT_PID=7
    + export SSH_AGENT_PID
    + echo Agent pid 7
    Agent pid 7
    + echo StrictHostKeyChecking no
    + ssh-add /tmp/id_rsa
    Identity added: /tmp/id_rsa (rsa w/o comment)
    + cd /gitrepo/somerepo
    + git init
    Initialized empty Git repository in /gitrepo/
    + git config core.sparseCheckout true
    /bin/sh: 1: cannot create .git/info/sparse-checkout: Directory nonexistent
    
    URPUTNIK
    URPUTNIK --- ---
    tak zas troska za mne, kdyz pustim php kontejner v K8s, ktery potrebuje namountovat treba configMapu, tak narazim na to, ze bezici php pouziva v runtime uzivatele www-data, ale konfig, ktery tam strka K8s, je pod rootem .. snizovat omezeni na cteni samozrejme muzu (napr 666), ale predpokladam, ze se to typicky dela jinak?
    Kliknutím sem můžete změnit nastavení reklam