• ú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í
    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.
    BLACKOUT
    BLACKOUT --- ---
    MARTEN: mozno by to riesilo AWS s Lambda, mat tam daky check ci je service hore ... ak nie pustit ... ale je to dost neprakticke riesenie.

    popr mat webhook na nejaku pipeline ktora urobi check (ak neni hore nahodi service) ak je hore tak exit 0 ... (to by slo urobit pekne cez gitlab).
    DWICH
    DWICH --- ---
    MARTEN: Podivej se na Google Cloud Run - je to sice beta, coz by ti vadit nemuselo a uctujou podle vseho jen za cas, kdy tvuj kontejner neco dela:
    Cloud Run  |  Google Cloud
    https://cloud.google.com/run/
    Pricing  |  Cloud Run Documentation  |  Google Cloud
    https://cloud.google.com/run/pricing

    Nebo na https://now.sh/
    ADMIX
    ADMIX --- ---
    MARTEN: Tak potom hledej serverless - https://github.com/fission/fission
    S tim uz ale vlastni zkusenost nemam :D
    MARTEN
    MARTEN --- ---
    DEFILA: Vim. Neni to pro produkcni veci. Bezi mi ale hodne service jako nastroje na vsechno mozne. Potrebuji je treba jednou tydne a netrapi me, ze prvni request bude trvat nekolik vterin. Sluzeb je vic a pokud by to melo porad bezet, tak by to bylo na muj vkus moc drahe.
    ADMIX: Jo, to jsem taky videl, ale chtel se tomu pokud mozno vyhnout. Pokud nepujde jinak, tak to pres to udelam.
    DEFILA
    DEFILA --- ---
    MARTEN: Hmm, to budeš mít, ale pekelne pomalé, pokud budeš chtít nahodit unitu jen ve chvíli, když tam někdo leze...
    ADMIX
    ADMIX --- ---
    MARTEN
    MARTEN --- ---
    Nevite nekdo o moznosti, jak automaticky spustit docker container pri prvnim pristupu? Idea je takova, ze bych mel nginx/traefik/haproxy a kdyz nekdo pristoupi na urcitou domenu, tak je bud poslan pres reverse proxy na dany container, nebo pokud nebezi, tak by se automaticky nejdrive spustil.
    Sluzby jako rancher, pokud se nepletu, resi pouze skalovani, ale pocitaji s tim, ze alespon jedna instance bezi. Super by to bylo na vice sluzeb, nejen web, ale i db,... Pokud by bylo manualne nastavit ktery docker-compose se ma nastartovat pro kterou domenu, taky by stacilo. Pokud neni hodinu zadny pristup, aby to container zase vypnulo.
    BLACKOUT
    BLACKOUT --- ---
    Ma niekto skusenosti s https://www.weave.works/oss/scope/ ?
    DEFILA
    DEFILA --- ---
    URPUTNIK:
    me to jede, a to jsem to zkopiroval od tebe (jsem na kubernetes 14.1.1)
    URPUTNIK
    URPUTNIK --- ---
    URPUTNIK: pro mysql:5.7 to totiz funguje "dle ocekavani" ..
    URPUTNIK
    URPUTNIK --- ---
    ahoj, uz se zase placam cely den na stejnem miste , asi neco prehlizim :) mejme defaultni mysql:8 image z docker hubu .. kdyz ho pustim lokalne, s parametry:
    
    $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=pw -e MYSQL_USER=user -e MYSQL_PASSWORD=pw -e MYSQL_DATABASE=weborder -d mysql:8
    

    tak se databaze i uzivatel spravne zalozi .. kdyz totez ale presypu do yaml souboru pro kubernetes deployment, tak ve spustenem image to neni, ani databaze, ani uzivatel .. tusite nekdo proc?

    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: weborder-mysql
      namespace: dev10
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: weborder-mysql
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1        # how many pods we can add at a time
          maxUnavailable: 1  # maxUnavailable define how many pods can be unavailable during the rolling update
      template:
        metadata:
          labels:
            app: weborder-mysql
        spec:
          containers:
          - image: mysql:8
            name: weborder-mysql
            env:
            - name: "MYSQL_ROOT_PASSWORD"
              value: "pw"
            - name: "MYSQL_DATABASE"
              value: "weborder"
            - name: "MYSQL_USER"
              value: "user"
            - name: "MYSQL_PASSWORD"
              value: "pw"
            ports:
            - containerPort: 3306
              name: mysql
         ..
    


    mozna souvisi s https://dev.to/yoshiyukikato/tips-to-use-mysql-80-on-kubernetes-m3l ?
    ADM
    ADM --- ---
    oprava: pokud mu ten php skript pobezi jako root, tak by to mel zalogovat (ale overovat to nebudu)
    ADM
    ADM --- ---
    DEFILA: tady se ale bavime o filesystemu v containeru, neni mi znamo a zatim jsem se nesetkal s image (z tech beznych oficialnich), ktera by mela nastaveny selinux labely (a pravdepodobne by byly neucinny). presah z containeru do filesystemu hosta, tak tam samozrejme plati politika hosta. ano, rhel ma selinux politiku pro docker, takze z kontejneru si i na explicitne bind mountovany adresare nesahnes, ale to s tim prilis nesouvisi

    DEFILA: tak to prave naopak, to je hlavni filozofie kontejnerizace aplikaci, ze ma v containeru pid 1 a nebezi pod nejakymi proces managery. dale vetsinou kazda aplikace umi logovat, rekneme aspon do souboru. jako priklad dejme tomu ten webserver chci access log, tak nastavim logovani do konkretniho log souboru, pro jednoduchost v imagi vytvorim ten symlink soubor.log -> /proc/self/fd/1 a hotovo. jak si to interne prebere aplikace forkujici child workery neni az tak podstatne, access.log logovat umi, vyrizeno. problem nastava, pokud chce logovat z toho php, tam to ze skriptu proste do stdout a stderr pid 1 proste nedostane, tam je jedina moznost pouzit tu zkratku php://. dockerd cte log pouze z pidu 1 beziciho containeru
    DEFILA
    DEFILA --- ---
    ADM:
    tohle neni uplne pravda, pokud nevypnes security politku, tak ma prednost predevsim; zkus si nekdy pustit i jednoduchy Apache httpd na RHELu, kde je SElinux zapnuty(nebo na DEbianu s apparmor); v nejakem, 'custom' adresari -> nic ti nepojede bez ohledu na to, zda jsi root; budes muset menit labely na filech, abys to mohl pustit
    DEFILA
    DEFILA --- ---
    ADM:
    pokud netlacis jinak, tak mas v contejneru tvoji aplikaci ako pid 1 ..., coz je proste spatne, musis si ten kontejner ohnout, aby se tohle nedelo
    ADM
    ADM --- ---
    problem je v tom, ze log dostane pouze z pidu 1, a z potomku pouze pokud si to ty potomci resi, ze to zaloguji prostrednictvim parenta. prava typu filesystem, apparmor, selinux v tom podle me nehraji roli, on to proste do ty pipe nedostane
    Kliknutím sem můžete změnit nastavení reklam