Si të përdorni Docker për të kontejneruar PHP dhe Apache
![](common-images/how-to-use-docker-to-containerise-php-and-apache/6dc7b5a0.jpeg)
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 WORKDIR
në Dockerfile
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 EXPOSE
në Dockerfile
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.