Dockerben apache config es a konfigban használt mappák elérhetővé tétele

Fórumok

Helló!

Van több régi kód aminek php 5.3 és apache 2.2 kell, találtam ilyet hozzá:

http://vesko.blogs.azonmedia.com/2020/09/26/docker-image-with-apache-2-…

Dockert felraktam Ubuntu 20.04 LTSre fel is ment, ha elindítom így:

docker run -it -p 80:80 -v /var/www/html:/web/apache-2.2/htdocs -e APACHE_RUN_USER=www-data -e APACHE_RUN_GROUP=www-data kenashkov/php:5.3.29-apache-stretch

akkor ha rakok a /var/www/html/phpinfo.php fájlba phpinfo akkor megy is a php.

Nem használtam még dockert. Az a kérdésem, hogy adjam meg, hogy az apache konifgokat melyik mappából vegye, például nekem itt van a 2.2 apache /etc/apache2/ helyett:

/teszt/apache-cfg/

Valamint a konfigban van több különböző elérési út, ahol vannak a fájlok:

/teszt/www/prj1/

/var/www/prj2/

/var/testing/prj3/

Hogy tudom megadni, hogy a konténerben lévő apache ezeket elérje? Ezekre a konfig hivatkozás a /teszt/apache-cfg/ mappában van, de nem akarom ezeket módosítani, ha lehet.

Még nem tartok ott, de a php 5.2ből a mysql kérések el fogják érni a lokálisan futó mysqlt, vagy máshogyan kell kapcsolódni rá? ip címmel? vagy socket?

Ha átraknám másik portra a 80ról, akkor ha felrakok nginxet, akkor tudom majd proxizni egy adott vhost esetén ezt magamnak tesztből, hogy a többi vhoston az Ubuntu alap phpja fog működni?

Hozzászólások

Szerkesztve: 2022. 01. 23., v – 20:41

A konfighoz a host könyvtárát odaadod neki a megfelelő helyre: -v /teszt/apache-cfg:/etc/apache2

A többit pedig ugyanoda teszed az konténerben, mint ahol a hoston van, pl.:  -v /teszt/www/prj1:/teszt/www/prj1

A MySQL-t a host IP-címén fogod elérni (vagy berakhatod a socketet volume-ként, de nem ajánlom).

Egyébként javaslom az ismerkedést a docker-compose-zal, egy fokkal egyszerűbb vele az élet.

Köszönöm, kipróbálom. Úgy értettem, hogy a dockerben lévő apache talán az /etc/apache2 könyvtárból olvassa a konfigjait, hogy tudnám ezt felülírni, hogy ne onnan, hanem az általam megadott /teszt/apache-cfg legyen az /etc/apache2/ helyett?

Ha így megadnám a -v /test/:/var/www/

Akkor amit a php és apache a /test/ és a /var/www/ alatti mappákban keres, akkor el fogja érni? Írni is tudja majd?

Utána nézek a docker-compose utasításnak is.

Mysql esetén akkor a lokális IP címére fog csatlakozni a php kód.

Úgy értettem, hogy a dockerben lévő apache talán az /etc/apache2 könyvtárból olvassa a konfigjait, hogy tudnám ezt felülírni,

Úgy ahogy fentebb írtam. Akármennyi -v path_a_hoston:path_a_konténerben paramétert megadhatsz.

Ha lesz joga, írni is fogja tudni, de itt jönnek elő a csodálatos problémák, hogy UID/GID szinten kell megfelelned az egyik oldalon a másiknak. (Én a konténerek passwd és group fájljait szoktam módosítani a hostomnak megfelelően.)

Hali,

a --restart kapcsolo hasznalataval tudod megadni, hogy hogyan viselkedjen a kontener:

  • --restart always
  • --restart unless-stopped

Persze  a dockerd az mas teszta, azt vagy systemd vagy egyeb init rendszer-ben kell majd beallitani hogy induljon.

Support Slackware: https://paypal.me/volkerdi

Nagyon régen docker-eztem, de úgy emlékszem, több -v mapping-et is tudsz csinálni...

Találtam ilyen leírást:

you can use -v option from cli, this facility is not available via Dockerfile

docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash

where host_dir is the directory from host which you want to mount. you don't need to worry about directory of container if it doesn't exist docker will create it.

If you do any changes in host_dir from host machine (under root privilege) it will be visible to container and vice versa.

Nekem akkor -v /teszt/apache-cfg:/etc/apache2 -v /teszt:/teszt  -v /var/www:/var/www kell paraméternek?

Írd le egy Dockerfile vagy Compose fájlban, hogy mit szeretnél, akkor nem kell ennyi parancssori mindenféle és ránézésre adja magát.

Igen, ezt próbálom, csak Centos 6 + apache 2.2 + (apache lib) php 5.3 lenne a jó, de nem találtam működő konténert, ami ezt tudná még.

frissítés: talán itt egy: Image Layer Details - zimmobe/php:5.3-apache-centos-5 | Docker Hub

Dockerfile-ban az image-t írod le, compose file-ban a konténert (mountokkal, networkkel, linkekkel, startup opciókkal).

 

Persze ha csak egy konténer van akkor azt leírhatod egy bazi hosszú command line-ba is, de szerintem kényelmesebb a compose file.

És ugye a compose-al indított konténert kezelgetni is egyszerűbb compose parancsokkal.

Gábriel Ákos

Nincs letölthetően egy másik változat, építeném újra, de ez van:

 

/docker-centos-apache-php-php53# docker build - < Dockerfile

 

Sending build context to Docker daemon   12.8kB
Step 1/46 : FROM centos:centos6.7
 ---> 9f1de3c6ad53
Step 2/46 : MAINTAINER Naqoda <info@naqoda.com>
 ---> Using cache
 ---> 5f2b310cb828
Step 3/46 : ARG uid=1000
 ---> Using cache
 ---> 836a84923132
Step 4/46 : RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6       && rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6        && rpm --import https://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
 ---> Running in 579cb7b12a63
curl: (35) SSL connect error
error: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6: import read failed(2).
The command '/bin/sh -c rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6       && rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6        && rpm --import https://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY' returned a non-zero code: 1

Mit tudok csinálni?

Centos 6 repo már nincs szerintem.

Vagy szerzel egy komplett image-t és azt elindítod vm-ben, onnan ki lehet mazsolázni amit kell vagy keresel egy másik disztribúciót amiben vannak még ilyen régi csomagok.

Vagy:

https://www.getpagespeed.com/server-setup/how-to-fix-yum-after-centos-6…

Gábriel Ákos

Köszi. Itt találtam egyet:

https://hub.docker.com/layers/zimmobe/php/5.3-apache-centos-5/images/sh…

 

Az a baj, hogy ha a konténeren belül létrehozok egy példa php fájlt, benne a phpinfo(); résszel, működik, de ha mappingolom fel, akkor nem futtatja le a php-t, letöltésként megjelenik a php fájl forrása...

A /var/www/html/pelda.php működik, a /var/www/prj2/pelda.php nem. 

Ez van a docker-compose.yaml ben:

 volumes:
      - /var/www/prj2/:/teszt/var/www/prj2/

A fájlt látja, csak a php nem futtatja.

Köszi, megnézem úgy, hogy beállítom az ownert és grouppot azonosra. Összehasonlítom a létrehozott phpinfós fájl jogaival, mai meg működik.

A owner id és group id aminek azonosnak kell lenni, vagy a névnek is?

Ha a www-data 33, máshol a www-data 500 idjű, akkor az úgy nem jó gondolom.

Az a legfurcsább, hogy nincs semmi hibaüzenet, hogy a php fájlt nem dolgozza fel, csak letölti a böngésző a forrását.

Az nem lehet gond, hogy a -v mapping opcióval éri el a fájlokat, és oda is kell valami jog?

A https://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY nem érhető el, a másik két kulcs igen.

Én elkezdeném kipucolni a dockerfile-t: ez a kulcs kuka, a https://centos6.iuscommunity.org/ius-release.rpm telepítése kuka, a DB2 PDO driver telepítése mindenestől kuka.

Nem tudom mennyire fontos rendszerről van szó, de komolyabb production kódok alá tuti nem tennék nem komoly helyekről származó környezetet.

A fenti esetben inkább feltelepíteném magam az image-t az alapoktól.

Kezdetnek nem kell hozzá 20.04 se, egy 16.04 már eléggé megfelelő, bár tény nem mai darab.

Körbe kell nézni, talán 5.3-hoz van valahol régi official package. Ha nincs, akkor inkább forgatnám forrásból.

Plusz egyszerűbb ha mod_php-t használsz azaz egy op rendszer alatt. Kezdő dockeresként jobb ha egy konténernél maradsz.

Mert akkor az "komoly helyről" fog származni?

A Dockerben pont az a jó hogy le tudod tölteni a Dockerfile-t, amit átnézel, átírsz ha akarod és helyben is megépítheted az image-edet ha akarod.
Abban igazat adok, hogy ha van rá idő akkor megéri a végleges konténert magadnak megépíteni.
 

Gábriel Ákos

Itt most nem Dockerfilera gondoltam elsősorban, hanem fogyasztásra kész docker hub-os image-ra. Játszani mehet bármi, de prod felhasználásra max olyat amit pár millióan már letöltöttek.

A Dockerfile annyiból jobb, hogy látod mit csinál, de ahhoz érteni is kell hozzá. Inkább tanulni hasznos.

Ha én rakom össze nulláról az image-t, akkor tudni fogom tutira, hogy mi van benne, azt teszem bele amire valóban szükség van. Igaz, ehhez szintén érteni kell hozzá.

A fenti esetben megéri magadnak építgetni, mert nem találsz igazi használatra készet. Egyébként a legeslegjobb ha official image-t használsz. Pl miért rakjak össze egy mysql konténert, ha van rá hivatalos image? (mondjuk azért mert 5.1-es nincs, nah akkor érdemes)

Egyébként lehet, hogy KVM virtualizáció felé kellene elmozdulnod, mert a Docker nem lesz alkalmas arra, amit szeretnél... biztos van olyan disztribúció, amelyikben Apache 2.2 és PHP 5.3 van, fel kell telepíteni és elgondolkodni azon, hogyan lehet frissíteni.

Bármit is meg lehet csinálni dockerben is ...

Hát, ööö... bármit nem. :)

de valszeg igazad lesz abban, hogy a jelenlegi tudásszintjéhez ez a feladat nem passzol és hamarabb kész ha kvm-ben csinálja.

Sok dolgot egyszerűsít egy kutyaközönséges virtualizáció, bár nem olyan divatos, mint a Docker és a Kubernetes. :)

Én most megnéztem a Docker HUB-ot, van hivatalos Apache HTTPD 2.2 image, illetve PHP5.3 is. Régiek, de vannak. A PHP-nál nem tudom, bele kell-e rakni pl. a MySQL extension-t, mert ha bele, kérdés, hogy a kínált telepítő szkriptek elboldogulnak-e a mutatvánnyal, de talán el.

 

A kérdés, hogy miért fontos a CentOS-os háttér? A HUB-on nagyon kevés CentOS alapú hivatalos image-t láttam. Ha viszont valahogy át lehet hidalni ezt a problémát, akkor elég egyszerűen készíthető saját image, a saját extension-ökkel, és szerintem ez célravezetőbb, mint egy amúgy is bőven EOL PHP verzió harmadik fél által készített image-jét használni.

TheAdam

Csak kérdezem, hogy van más, járhatóbb, szebb módja, ha az Ubuntu 20 lts esetén pár vhost esetén kellene elérhetővé tenni php 5.3 + apache 2.2-t? Az apache az lehet lehetne újabb, csak rewrite és directory részeket kellene frissíteni, mert 2.2-höz van.

Most az Ubuntu 20-on nginx van. Azt gondoltam, hogy jó lenne, ha futna valami másik porton apache, abban lenne libphp 5.3, de lehet php-fpm 5.3 is jó lenne. Szóval a legkompatibilisabb lenne egy olyan apacheot futtatni, amihez mint libphp van 5.3, ami a centos6ban volt. Ezért gondoltam a Dockerre. 

Nem akarnám teleszemetelni a rendszert, hogy fordítok php 5.3at meg apache 2.2t. 

Régen LXCben csináltam olyat, hogy azon belül fordítottam és csak a konténert szemeteltem tele, nem volt jelentő overhead, működött. Most hogy szokás ezt?

Igazatok van, hogy egy VM egyszerűbb lenne, lehet az lesz. 

Az is lehet, hogy ha majd fut az 5.3as kód, átrakom 5.6 vagy 7.0ra és akkor egyszerűbb lesz környezetet adni neki.

Csak kérdezem, hogy van más, járhatóbb, szebb módja, ha az Ubuntu 20 lts esetén pár vhost esetén kellene elérhetővé tenni php 5.3 + apache 2.2-t? Az apache az lehet lehetne újabb, csak rewrite és directory részeket kellene frissíteni, mert 2.2-höz van. [...] Nem akarnám teleszemetelni a rendszert, hogy fordítok php 5.3at meg apache 2.2t. 

Csak szopni fogsz, összeszemeteled mindenféle szarral az Ubuntu LTS-t és nyitsz egy nagykaput akár évtizedes biztonsági résekkel. Felejtsd el.

Igazatok van, hogy egy VM egyszerűbb lenne, lehet az lesz. 

Keress valami régi szart, amiben Apache 2.2 és PHP 5.3 van, bele virtuális gépbe, aztán a host gépről egy proxy a virtuális gépbe. És ha véletlenül felnyomják, akkor legalább csak a virtuális gépig jutnak, azt meg újrahúzod snapshot-ból adott esetben.

Az is lehet, hogy ha majd fut az 5.3as kód, átrakom 5.6 vagy 7.0ra és akkor egyszerűbb lesz környezetet adni neki.

Ne konzerváld a szart. A 7.x már nem támogatott, esetleg kapsz biztonsági frissítést még 10 hónapig: https://www.php.net/supported-versions.php

Azt figyeltem meg, hogy az ilyen migrációkat úgy lehet megcsinálni, hogy elindítjuk, és a felmerülő hibákat egyesével megoldjuk. (pl)

Szerk: van még az a jóság, hogy Nyomasek Bobó kérésére a `mysql` nevű komponenst megszüntették, esetleg ezt lehet használni helyette: https://github.com/dshafik/php7-mysql-shim (Szerk2: ne itt nyissunk vitát arról, hogy 'nagyon jogos volt a mysql megszüntetése, hiszen hiba/hiányosság volt benne [és Bobó nem szeret meglévő kódot javítani/bővíteni]' és/vagy 'az új változat többet/jobbat/mást tud')