Podman (docker) fedora httpd, mariadb

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

Szerkesztve: 2022. 11. 26., szo – 19:00

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 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.

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:

#!/bin/bash

/usr/sbin/httpd -DFOREGROUND &
/usr/sbin/mariadbd -u root

 

Dockerfile:

COPY start.sh /start.sh

ENTRYPOINT /start.sh

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…

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?

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