• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    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?
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    MUXX: Potřebuju se to naučit, tak zatím jedu podle tutošů. Ty příkazy jsou takhle za sebou uvedeny v "How to use" tady https://hub.docker.com/_/mariadb#how-to-use-this-image

    URPUTNIK: díky, vyzkoušim
    URPUTNIK
    URPUTNIK --- ---
    SYNTAX_TERROR:
    (1: docker run -it --network  a9e53e117a8d -p3306:3306 --rm mariadb) (2:mysql -hsome-mariadb -uexample-user -p)

    je spusteni docker image mariadb (1), s nastavenim networku, mapovani portu .. to co je 2, je pretizenej CMD do toho image, v tomhle pripade to spusti konzolovyho mysql klienta s parametrama (napriklad ta -h je zkracenina pro --host, cili mu rikas, na kterym hostu ma hledat databazi)

    koneckoncu, k mysql , doporucuju readme u oficialniho mysql image v hubu , tam je to vysvetleny v prikladech
    MUXX
    MUXX --- ---
    SYNTAX_TERROR: co vlastne potrebujes? prijde mi, ze nahodne placas nesouvisly prikazy z napovedy.

    docker run --name my-mariadb-container -p3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=my-db-name mariadb:latest


    Bylo by dobry predtim pozastavovat/smazat ty pokusny instance co uz tam mas.
    DEFILA
    DEFILA --- ---
    SYNTAX_TERROR:
    pokud si to pmatuju, tak docker vytvari virtualni bridge -> tedy 8e2bebc3ed4e; je tva odpoved; kdyz si vylistujes interfaces (ip a s); tak by ti IP mela souhlasit s tvym briddgem - docker network inspect JMENO
    Kliknutím sem můžete změnit nastavení reklam