Meie töökeskkonna seadistamine
PHP konteineri konfigureerimine
Nginxi konteineri konfigureerimine
MySQL-i konteineri konfigureerimine
Meie rakenduse loomine
Järeldus
PHP-rakendused koosnevad tavaliselt veebiserverist, relatsioonilisest andmebaasisüsteemist ja keeletõlkist endast. Selles õpetuses kasutame dockeri abil täielikku PHP-rakenduste virna. See on põhjalik õpetus, milles me ehitame ja korraldame konteinereid Nginxi (veebiserver), MySQL (andmebaasisüsteemi) ja PHP jaoks.
Selle õpetuse jaoks kirjutame lihtsa rakenduse, mis loeb andmebaasist linnade nimekirja ja kuvab selle veebilehel, sel viisil demonstreerime lihtsat, kuid töötavat PHP rakendust.
See juhend eeldab, et teil on juba installitud Docker-CE ja teil on vähemalt minimaalsed tööalased teadmised dokkerist. Selleks võite vaadata järgmisi õpetusi:
Meie töökeskkonna seadistamine
Päriselu dokkimispõhine rakendus koosneb tavaliselt mitmest konteinerist. Nende käsitsi haldamine võib kergesti muutuda üsna segaseks ja tülikaks. Siin tulebki mängu docker-compose. See aitab teil lihtsa yaml
konfiguratsioonifaili kaudu hallata paljusid konteinereid .
Installige docker-compose.
curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Looge kaust kõigi selle näite vajalike failide hoidmiseks ja seejärel cd
sellesse. Edaspidi on see meie töökataloog ja iga käsk täidetakse selles kaustas ja igale teele viidatakse sellega seoses. Sellele kaustale võib hiljem viidata kui WORKING_DIR
.
mkdir ~/docker
cd ~/docker
Nüüd looge veel kolm kausta.
mkdir php nginx app
php
Kausta, kus me ehitada meie kohandatud PHP pilt on nginx
kausta korraldab vajalikud failid meie kohandatud nginx pilti ja app
kausta, kus pöörame lähtekoodi ja konfiguratsiooni meie proovist.
PHP konteineri konfigureerimine
Selles näites kasutame php-fpm
Nginxi veebiserveriga ühenduse loomiseks. Kasutame ametlikku PHP baaspilti. Siiski peame installima ja lubama ka mõned laiendused, et saaksime andmebaasi juurde pääseda. Toas php
kausta luua faili nimega Dockerfile
ja panna järgmise sisuga sinna.
FROM php:7.1-fpm-alpine3.4
RUN apk update --no-cache \
&& apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache mysql-dev \
&& docker-php-ext-install pdo pdo_mysql
Pange tähele, et me kasutame ametliku PHP-pildi Alpine versiooni. Alpine on väga väike jaotus, mis on suunatud konteineritele, pakkudes palju väiksemaid jalajälgi. Pange tähele ka käsu kasutamist docker-php-ext-install
, ametlik PHP-pilt pakub seda käsku PHP-laiendite installimise ja konfigureerimise hõlbustamiseks.
Nüüd loome selle Dockeri pildi, väljastades järgmise (meie sees WORKING_DIR
):
docker build -t vultr-php php/
docker-compose.yml
faili
Nagu juba mainitud, docker-compose
võimaldab teil hallata mitmeid konteinereid lihtsa konfiguratsioonifaili kaudu. Selle konfiguratsioonifaili nimi on tavaliselt docker-compose.yml
. Looge see fail app
kaustas.
touch app/docker-compose.yml
Nüüd sisestage sellesse faili järgmine sisu.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Selgitame seda süntaksit. Esiteks märkige esimene rida.
version: '2'
See määrab kasutatava docker-compose.yml
konfiguratsioonifaili versiooni . Järgmine rida täpsustab teenuseid ehk teisisõnu pakutavaid konteinereid.
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Pange tähele, et igal teenusel on services
ploki sees konkreetne võti . Siin määratud nime kasutatakse hiljem sellele konkreetsele konteinerile viitamiseks. Pange tähele ka seda, et php
konfiguratsioonis määratleme konteineri käitamiseks kasutatava pildi (see on pilt, mille me varem koostasime). Samuti määratleme helitugevuse kaardistamise.
volumes:
- ./:/app
See käsib vastendada docker-compose
praegune kataloog ( ./
) /app
konteineris oleva kataloogiga. Viimane rida määrab /app
konteineris oleva kausta töökataloogiks, mis tähendab, et see on kaust, kust vaikimisi käivitatakse kõik konteineris olevad tulevased käsud.
Nüüd saame oma konteinereid orkestreerida.
cd ~/docker/app
docker-compose up -d
Saate käivitada järgmise käsu, et veenduda, kas PHP-konteiner on käivitatud:
docker ps
Kuidas konteinerites käske täita
Ikka app
kausta sees saame käsu abil käivitada mis tahes käsu määratletud teeninduskonteineri sees docker-compose
.
docker-compose exec [service] [command]
[service]
Kohatäide viitab teenuse võti. Meie puhul oli see php
. Käivitame konteineris käsu, et kontrollida oma PHP versiooni.
docker-compose exec php php -v
Näete järgmist väljundit.
PHP 7.1.14 (cli) (built: Feb 7 2018 00:40:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
Nginxi konteineri konfigureerimine
Nii nagu PHP-konteiner, peame ka veebiserveri jaoks looma kohandatud pildi. Kuid sel juhul peame lihtsalt andma oma konfiguratsiooni virtual host
. Veenduge, et olete meie sees WORKING_DIR
ja looge kausta Dockerfile
sees nginx
:
cd ~/docker
touch nginx/Dockerfile
Nüüd sisestage sellesse järgmine sisu Dockerfile
:
FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
Kasutame Nginxi vaikepilti, mis põhineb Alpine'il. Sellel Dockeri failil kopeerime lihtsalt konfiguratsioonifaili oma rakenduse seadistusse. Enne selle pildi loomist looge konfiguratsioonifail.
touch nginx/default.conf
Nüüd täida see selle sisuga.
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /app;
index index.php;
#server_name server_domain_or_IP;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Pange tähele, et fastcgi_pass php:9000
real viitame PHP konteinerile selle nime service
järgi docker-compose.yml
konfiguratsioonifaili plokis . docker-compose
Loob sisemiselt võrgu ja määrab iga määratletud teenuse hostinimena teenuse nime. Nüüd saame luua Nginxi pildi.
docker build -t vultr-nginx nginx/
Värskendamine docker-compose.yml
Nüüd värskendage app/docker-compose.yml
faili.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
Oleme lisanud ainult uue teenuse. Konfiguratsioon on peaaegu sama, välja arvatud järgmised.
depends_on:
- php
ports:
- 80:80
Once the Nginx container needs the PHP service to be fully initialized, we force this requirement in the depends_on
option.
The ports
configuration key maps a host port to a container port, here we map the port 80
in the host to the port 80
in
the container.
Now create a file called index.php
inside the app
folder and put the following in it.
<?php phpinfo();
Make sure the port 80
is accessible through your firewall and execute the following.
cd ~/docker/app
docker-compose up -d
Once again, double check that the service is up.
docker ps
Open a browser and access [vultr-instance-ip]
. You may find out your Vultr instance IP address by running the following.
hostname -I
You will see the PHP info page.
Configuring the MySQL container
Ametlik MySQL-pilt võimaldab konteinerit konfigureerida lihtsate keskkonnamuutujate kaudu. Seda saab teha environment
teenuseploki määratluses oleva suvandiga. Värskendage ~/docker/app/docker-compose.yml
faili järgmiselt.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
mysql:
image: mysql:5.7.21
volumes:
- ./:/app
- dbdata:/var/lib/mysql
environment:
- MYSQL_DATABASE=world
- MYSQL_ROOT_PASSWORD=root
working_dir: /app
volumes:
dbdata:
Nüüd oleme andmebaasi jaoks määratlenud uue teenuse. Pange tähele joont dbdata:/var/lib/mysql
. See ühendab konteineri tee /var/lib/mysql
Dockeri hallatavasse püsivasse köitesse, nii et andmebaasi andmed säilivad pärast konteineri eemaldamist. See maht tuleb määratleda tipptaseme plokis, nagu näete faili lõpus.
Enne uue konfiguratsiooni korraldamist laadime alla MySQL-i näidisandmebaasi. Ametlik MySQL dokumentatsiooni
annab mõned proovi andmebaase. Kasutame tuntud maailma andmebaasi. See andmebaas sisaldab riikide ja linnade loendit. Selle näidise allalaadimiseks tehke meie rakenduse kaustas järgmine toiming.
curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz
Nüüd korraldame oma konteinerid.
docker-compose up -d
Nagu olete juba märganud, docker-compose up
käivitab käsk ainult need konteinerid, mida pole veel käivitatud. See kontrollib erinevusi teie docker-compose.yml
faili ja jooksvate konteinerite praeguse konfiguratsiooni vahel.
Kontrollige veel kord, kas MySQL-i konteiner on käivitatud.
docker ps
Täitke nüüd maailma andmebaas.
docker-compose exec -T mysql mysql -uroot -proot world < world.sql
Saate kontrollida, kas andmebaas on täidetud, valides andmed otse andmebaasist. Esmalt avage konteineri sees MySQL-viiba.
docker-compose exec mysql mysql -uroot -proot world
Käivitage MySQL-i viibas järgmine toiming.
select * from city limit 10;
Näete linnade loendit. Nüüd sulgege MySQL-i viip.
mysql> exit
Meie rakenduse loomine
Nüüd, kui kõik vajalikud konteinerid on valmis, saame keskenduda näidisrakendusele. Värskendage
app/index.php
faili järgmiselt.
<?php
$pdo = new PDO('mysql:host=mysql;dbname=world;charset=utf8', 'root', 'root');
$stmt = $pdo->prepare("
select city.Name, city.District, country.Name as Country, city.Population
from city
left join country on city.CountryCode = country.Code
order by Population desc
limit 10
");
$stmt->execute();
$cities = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Vultr Rocks!</title>
</head>
<body>
<h2>Most Populous Cities In The World</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Country</th>
<th>District</th>
<th>Population</th>
</tr>
</thead>
<tbody>
<?php foreach($cities as $city): ?>
<tr>
<td><?=$city['Name']?></td>
<td><?=$city['Country']?></td>
<td><?=$city['District']?></td>
<td><?=number_format($city['Population'], 0)?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</body>
</html>
Kui [vultr-instance-ip]
sisenete veebibrauseris, näete loendit maailma kõige suurema rahvaarvuga linnadest. Õnnitleme, olete dokkerit kasutades juurutanud täielikult töötava PHP-rakenduse.
Järeldus
Selles õpetuses näitasin samm-sammult, kuidas konfigureerida täielikult töötavat PHP-rakendust. Ehitasime PHP ja Nginxi jaoks kohandatud pildid ning konfigureerisime oma konteinerite orkestreerimiseks dockeri koostamise. Vaatamata sellele, et see seadistus on väga lihtne ja lihtne, peegeldab see reaalset stsenaariumi.
Selles juhendis oleme loonud ja märgistanud oma pildid kohapeal. Paindlikuma seadistuse jaoks saate need pildid dokkimisregistrisse lükata . Võite pöörduda ametlikku dokkimisregistrisse või isegi seadistada oma dokkide registri. Igal juhul võimaldab see teil pilte ehitada ühes hostis ja kasutada neid teises.
Üksikasjalikuma kasutamise kohta docker-compose
vaadake ametlikku dokumentatsiooni .
Sõltuvalt teie rakenduse nõuetest ja kasutatavast PHP raamistikust võite soovida lisada rohkem laiendusi. Seda saab hõlpsasti teha, muutes Dockerfile
meie kohandatud PHP-pildi koostamiseks kasutatud väärtust. Kuid mõned laiendused vajavad konteinerisse installimiseks täiendavaid sõltuvusi. Iga laienduse põhinõuete ülevaatamiseks peaksite lugema PHP ametlikus dokumentatsioonis olevat laienduste loendit
.