Fórumok
Üdv,
Egy fedora konténerben szeretném használni a httpd és mariadb-t.
A Dockerfile-ban:
FROM fedora:latest
# packages
RUN dnf -y update && dnf -y install httpd php php-mbstring php-pdo mariadb-server && dnf clean all
# entrypoint, run
# RUN ["/usr/bin/mariadbd-safe"]
ENTRYPOINT /usr/sbin/httpd -DFOREGROUND
Az apache el is indul. Hogyan tudom elindítani a mariadb-t? A mariadbd-safe nem indul el:
# mariadbd-safe
221126 16:26:39 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
221126 16:26:39 mysqld_safe Starting mariadbd daemon with databases from /var/lib/mysql
A konténerben kézzel sem indul. Mit hagyok ki?
Hozzászólások
Esetleg ahogy itt írják, de csak keresési eredmény, tapasztalatom nincs vele: https://stackoverflow.com/questions/43688168/docker-cant-start-mariadb-…
ezt láttam, de nem segített (CMD).
Már majdnem jó:
A konténerben a "mariadbd -u root" fut szépen (manuális indítással). A Dockerfile-ból nem hajtja végre. Mit rontok el?
ha együtt használod, a CMD az ENTRYPOINT paramétere lesz, tehát: /usr/sbin/httpd -DFOREGROUND /usr/sbin/mariadbd -u root
egyébként miért nem jó neked ha külön fut a mariadb mint mindenki másnak?
A konténerizáció egyik jóságának kihasználása lenne, ha az Apache és a MariaDB külön konténerekben futna... A POD, mint "entitás" is így definiálódik: "Pods are the smallest, most basic deployable objects in Kubernetes. A Pod represents a single instance of a running process in your cluster. Pods contain one or more containers, such as Docker containers." A podman pedig ezek menedzselését hivatott megvalósítani.
A gyors gondolat többet ér, mint a gyors mozdulat.
appot és db-t nem hiszem, hogy érdemes egy pod-ba rakni, ha erre célzol. Mig az appból esetleg futhat több instance is (több pod), addig a db-nél ez nem ilyen egyszerü.
Főleg, hogy alapból lehet, más módon skálázódnak, DB-ből elég 2 pod, appból meg 14, így meg elveszted a szabadságod.
Illetve a podok vágóállatok, nem kiskedvencek, ha meghal egy-kettő app pod, nem dől össze a világ, simán lehet, hogy nincs akkora terhelés, és auto leskálázta az orchestrator.
És akkor el is érkeztünk a gracefull shutdown problémákhoz.
Így jónak tűnik:
start.sh:
Dockerfile:
A probléma ezzel az lesz, hogy elveszik a SIGTERM és nem lesz gracefull shutdownod.
Mivel az emberek összekeverik a podokat és a containereket, így inkább bevezették az --init flaget.
Ami meg egyéb problémákat okoz, ha pl statefull az app, és leállítás előtt el kéne menteni az állapotát, de te meg előtte leállítod a DB-t.
https://stackoverflow.com/questions/68523106/docker-bash-shell-script-d…
Totális antipattern, amit csinálsz. Persze, fizikailag lehetséges, csak éppen értelme zéró.
tudom nem ez volt a kérdés, de miért nem indítasz két konténert?
egy hivatalos mariadb-t, és a saját php+apache konténeredet?
Rendben, külön teszem.
Köszönöm
Igen, igen. Egy Docker konténer arra van, hogy egy folyamatot futtasson te kettőt akarsz benne. Ez így nem fog menni. Meg lehet oldani (supervisord process management), de inkább indítsd két külön konténerben.
Ha már több service kell egy konténerben. Hivatalos doksi:
https://docs.docker.com/config/containers/multi-service_container/
Régen volt, elfelejtettem.
igen ez is igaz, de inkább ez legyen:
https://docs.docker.com/compose/features-uses/
Kubernetes még kicsit erős 2 konténerre....
+1 a Docker Compose-ra.
Egy supervisord.conf minta (az archivum kedvéért):