• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    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
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    MUXX: Přidal jsem, ale nepomohlo
    docker run -it --network  a9e53e117a8d -p3306:3306 --rm mariadb mysql -hsome-mariadb -uexample-user -p
    ERROR 2005 (HY000): Unknown MySQL server host 'some-mariadb' (-3)
    

    btw oproti kterýmu networku to mám spouštět? vypisuje mi to tu tyto 3:
    
    NETWORK ID          NAME                DRIVER              SCOPE
    8e2bebc3ed4e        bridge              bridge              local
    a9e53e117a8d        host                host                local
    3d426a569f8a        none                null                local
    
    MUXX
    MUXX --- ---
    Chybi ti tam port: -p3306:3306.
    SYNTAX_TERROR
    SYNTAX_TERROR --- ---
    čaute, jsem v Dockeru very newbie a potřeboval bych poradit s naprostým základem.

    Následuju postup z tohoto: https://hub.docker.com/_/mariadb
    První command proběhne:
    docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag

    docker ps -a ten kontejner vypisuje:
    
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
    33cc717656c6        mariadb             "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes             3306/tcp            some-mariadb
    

    Moje první otázka je: KDE je otevřený ten port 3306? Když koukám na otevřený porty svého počítače, případně network interfacu označeného jako "Ethernet adapter vEthernet (DockerNAT)", tak tam žádný port 3306 otevřený není.

    Nicméně zkouším následující command z návodu
    
    docker run -it --network some-network --rm mariadb mysql -hsome-mariadb -uexample-user -p
    

    Což zkuchne na hlášce typu "some-network not found". Tak iniciativně (a asi blbě) spouštím docker network ls a IDcka jednotlivých interfaců vkládám do předchozího příkazu místo toho some-network.

    To už sice nechcípne na hlášce "network not found" a vyžaduje to po mě zadání hesla. Nějaké zadám a ve všech 3 případech (docker network ls mi vypisuje 3 networky) to skončí hláškou
    ERROR 2005 (HY000): Unknown MySQL server host 'some-mariadb' (-2)

    Něco dělám / chápu blbě?
    BLACKOUT
    BLACKOUT --- ---
    BLACKOUT: dost zalezi od toho ako a kde ti to bezi, ak to mas doma asi cez pipeline poriesit overenie ci je dany service up a potom proxy pass. ak pouzivas AWS tam by som skusil to lambdu, ak ineho cloud providera neviem ... ci azure / gck maju podobny "service" ako AWS.
    Kliknutím sem můžete změnit nastavení reklam