Si të përdorni Docker për të kontejneruar PHP dhe Apache


Kontejnerët Docker e bëjnë aplikacionin tuaj të lëvizshëm nëpër mjedise. Pasi të keni një imazh të kontejnerit, mund ta përdorni kudo ku Docker është i disponueshëm. Ja se si të kontejneroni një aplikacion ueb PHP duke përdorur serverin Apache.

Ne do të përdorim imazhin zyrtar të PHP Docker si bazën tonë. Janë dhënë variante të parakonfiguruara me Apache, kështu që nuk do t'ju duhet të instaloni vetë serverin në internet. Imazhi i bazës PHP ofron gjithashtu mjete të përshtatshme për menaxhimin e shtesave PHP.

Krijimi i një skedari Docker

Imazhet e docker krijohen nga një Dockerfile. Ky skedar përmban udhëzime që përdoren për të ndërtuar imazhin. Udhëzimet përfshijnë COPY, për të kopjuar skedarët dhe dosjet në kontejner, dhe RUN, i cili ekzekuton një komandë brenda kontejnerit.

Mund të aktivizoni një sajt të thjeshtë PHP duke kopjuar thjesht skedarët e tij në një imazh të bazuar në php:8.0-apache.

FROM php:8.0-apache
WORKDIR /var/www/html

COPY index.php index.php
COPY src/ src
EXPOSE 80

Ky Dockerfile merr index.php dhe src nga drejtoria jonë e punës dhe i kopjon ato në rrënjën e dokumentit Apache. Tani mund të ndërtoni imazhin dhe të filloni një enë prej tij. Ju do të shihni se siti juaj shërbehet nga Apache.

docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest

Imazhet e PHP Docker kanë rrënjën e dokumentit Apache në vendndodhjen e paracaktuar të Debian të /var/www/html. Instruksioni WORKDIRDockerfile do të thotë se komandat pasuese do të ekzekutohen brenda rrënjës së dokumentit.

Apache e ekspozon veten në portin e paracaktuar të serverit të uebit prej 80. Direktiva EXPOSEDockerfile e tregon këtë. Duke ekspozuar në mënyrë eksplicite portin, mund të përdorni flamurin -P me docker run për të lidhur automatikisht një port të rastësishëm pritës me portën 80 të kontejnerit.

Përshtatja e konfigurimit të Apache

Imazhet zyrtare PHP/Apache bazohen në Debian. Mund të përdorni menaxherin e paketave apt për të shtuar softuer shtesë që ju nevojitet.

Ju gjithashtu keni akses të plotë në mjetet e integruara të Apache. Ju mund të përdorni a2enmod/a2dismod për të menaxhuar modulet dhe a2ensite/a2dissite për të bashkëvepruar me hostet virtuale.

Skedari i konfigurimit të Apache është i paracaktuar në /etc/apache2/apache2.conf. Shtoni rreshta në këtë skedar, ose zëvendësojeni plotësisht, për të zgjeruar konfigurimin e Apache.

Një ndryshim që ia vlen të bëhet gjithmonë është të vendosni në mënyrë eksplicite ServerName Apache. Kjo ndalon paralajmërimin të paaftë për të përcaktuar me besueshmëri Emri i Serverit i cili zakonisht shfaqet në regjistrat e kontejnerit tuaj.

Ju gjithashtu zakonisht dëshironi të shtoni hostin tuaj virtual Apache. Kjo të lejon të konfigurosh konfigurimin e personalizuar përtej asaj që ofron faqja e Apache 000-default. Ja se si t'i bëni ato ndryshime.

COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
    a2enmod rewrite &&
    a2dissite 000-default &&
    a2ensite my-apache-site &&
    service apache2 restart

Ky shembull çaktivizon sitin e paracaktuar, mundëson sajtin e personalizuar dhe rinis Apache për të aplikuar ndryshimet. Moduli mod_rewrite është gjithashtu i aktivizuar, duke mundësuar përdorimin e direktivave Rishkruaj në skedarët .htaccess. Ju mund të dëshironi të aktivizoni edhe module të tjera, të tilla si titujt nëse konfigurimi juaj do të ndërveprojë me titujt e përgjigjeve.

Shtimi i shtesave PHP

Imazhet e PHP Docker vijnë me shërbime të integruara të menaxhimit të zgjerimeve. Disa shtesa janë aktivizuar si parazgjedhje - mund të kontrolloni se çfarë disponohet duke ekzekutuar php -m brenda një kontejneri që funksionon.

Shumë shtesa të zakonshme mund të instalohen duke përdorur docker-php-ext-install:

docker-php-ext-install pdo_mysql

Disa shtesa duhet të konfigurohen përpara se të instalohen. Ju mund të përdorni docker-php-ext-configure për të kryer konfigurimin e para-instalimit. Opsionet e disponueshme do të ndryshojnë sipas shtrirjes. Lexoni faqen manuale të shtesës për të përcaktuar flamujt që mund të jepni.

RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
    docker-php-ext-install gd

Ju gjithashtu mund të përdorni shtesa të shpërndara nëpërmjet PECL. Këto shtesa kërkojnë një procedurë instalimi me dy hapa. Fillimisht instaloni paketën PECL, më pas përdorni docker-php-ext-enable për të regjistruar shtesën me instalimin tuaj PHP.

RUN apt-get install -y libmcached-dev zlib1g-dev &&
    pecl install memcached-3.1.5 &&
    docker-php-ext-enable memcached

Konfigurimi PHP

Imazhet e Docker janë parakonfiguruar për të ngarkuar skedarët e konfigurimit PHP që gjenden në /usr/local/etc/php/conf.d. Shtoni skedarin tuaj .ini në këtë direktori. PHP do të përfshijë përmbajtjen e tij në kohën e ekzekutimit, duke mbishkruar çdo vlerë ekzistuese. Kjo është mënyra e rekomanduar për të zgjeruar konfigurimin e paracaktuar.

Rruga e drejtorisë së konfigurimit mund të ndryshojë në të ardhmen. Mund të merrni vendndodhjen e tij aktuale duke përdorur ndryshoren e mjedisit $PHP_INI_DIR. Aktualisht zgjidhet në /usr/local/etc/php/conf.d.

Përdorimi i Kompozitorit

Kompozitori nuk është i disponueshëm si parazgjedhje. Kompozitori është një përpjekje e komunitetit që ekziston në mënyrë të pavarur nga PHP. Duhet ta instaloni manualisht nëse dëshironi ta përdorni në një kontejner Docker.

Mënyra më e mirë për të përdorur Composer në ndërtimet tuaja është të referoni imazhin e vetë Docker të mjetit nëpërmjet një ndërtimi me shumë faza. Përdorni COPY --from për të sjellë binarin Composer në kontejnerin tuaj PHP; më pas mund të përdorni Composer si normalisht për të instaluar varësitë e projektit tuaj.

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install --no-dev

Përdorimi i kësaj qasjeje zvogëlon kompleksitetin. Nuk keni nevojë të shkarkoni dhe ekzekutoni skriptin e instalimit të Kompozitorit. Duke iu referuar composer:2, Docker do të tërheqë imazhin dhe më pas do të kopjojë binarin e Kompozitorit.

Skriptet e personalizuara të pikës hyrëse

Mund t'ju duhet të përdorni një skript të personalizuar të pikës hyrëse nëse dëshironi të ekzekutoni migrimet e aplikacioneve përpara se të fillojë koha e ekzekutimit të serverit kryesor. Mund të anashkaloni kontejnerin ENTRYPOINT për të përdorur sekuencën tuaj të nisjes.

Mund ta bëni që ekzekutimi i kontejnerit të vazhdojë si normalisht duke ekzekutuar apache2-foreground. Kjo do të ekzekutojë Apache në plan të parë, duke parandaluar daljen e kontejnerit pasi të përfundojë skripti i pikës hyrëse.

ENTRYPOINT ["bash", "/Docker.sh"]

Përmbajtja Docker.sh:

php app.php my-migration-command    # run migrations
service cron start                  # start some services
exec apache2-foreground             # main execution

konkluzioni

Dokerizimi i një shërbimi ueb PHP është i thjeshtë kur përdorni imazhet zyrtare. Ju mund të konfiguroni lehtësisht Apache dhe PHP me shtesa dhe skedarët tuaj të konfigurimit.

Ka shumë të ngjarë të hasni vështirësi kur përpiqeni të përdorni shtesa të komunitetit të palëve të treta si Composer. Këto nuk përfshihen si parazgjedhje, kështu që do t'ju duhet të përdorni ndërtimet me shumë faza të Docker ose procedurat e instalimit manual.

Përdorimi i Docker i jep aplikacionit tuaj shkathtësi se si dhe ku është vendosur. Me imazhin tuaj, ju mund të rrotulloni një instalim funksional të faqes tuaj duke përdorur vetëm docker build dhe docker run në terminalin tuaj.