Ü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?
- 323 megtekintés
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-…
- A hozzászóláshoz be kell jelentkezni
ezt láttam, de nem segített (CMD).
- A hozzászóláshoz be kell jelentkezni
Már majdnem jó:
RUN mariadb-install-db
ENTRYPOINT /usr/sbin/httpd -DFOREGROUND
CMD ["/usr/sbin/mariadbd", "-u", "root"]
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?
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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ü.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Így jónak tűnik:
start.sh:
#!/bin/bash
/usr/sbin/httpd -DFOREGROUND &
/usr/sbin/mariadbd -u root
Dockerfile:
COPY start.sh /start.sh
ENTRYPOINT /start.sh
- A hozzászóláshoz be kell jelentkezni
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…
- A hozzászóláshoz be kell jelentkezni
Totális antipattern, amit csinálsz. Persze, fizikailag lehetséges, csak éppen értelme zéró.
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
Rendben, külön teszem.
Köszönöm
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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....
- A hozzászóláshoz be kell jelentkezni
Kubernetes még kicsit erős 2 konténerre
+1 a Docker Compose-ra.
- A hozzászóláshoz be kell jelentkezni
Egy supervisord.conf minta (az archivum kedvéért):
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
;[program:sshd]
;command=/usr/sbin/sshd -D
[inet_http_server]
port=127.0.0.1:9001
[supervisorctl]
serverurl=http://127.0.0.1:9001
[program:mysql]
command=/usr/bin/pidproxy /var/run/mysql/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/run/mysql/mysqld.pid
process_name=mysqld
user_name=mysql
redirect_stderr=true
[program:httpd]
command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND
redirect_stderr=true
process_name=httpd
- A hozzászóláshoz be kell jelentkezni