PHP-rakenduse juurutamine Docker-composei abil

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

phpKausta, kus me ehitada meie kohandatud PHP pilt on nginxkausta korraldab vajalikud failid meie kohandatud nginx pilti ja appkausta, kus pöörame lähtekoodi ja konfiguratsiooni meie proovist.

PHP konteineri konfigureerimine

Selles näites kasutame php-fpmNginxi veebiserveriga ühenduse loomiseks. Kasutame ametlikku PHP baaspilti. Siiski peame installima ja lubama ka mõned laiendused, et saaksime andmebaasi juurde pääseda. Toas phpkausta luua faili nimega Dockerfileja 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.ymlfaili

Nagu juba mainitud, docker-composevõimaldab teil hallata mitmeid konteinereid lihtsa konfiguratsioonifaili kaudu. Selle konfiguratsioonifaili nimi on tavaliselt docker-compose.yml. Looge see fail appkaustas.

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.ymlkonfiguratsioonifaili 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 servicesploki sees konkreetne võti . Siin määratud nime kasutatakse hiljem sellele konkreetsele konteinerile viitamiseks. Pange tähele ka seda, et phpkonfiguratsioonis 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-composepraegune kataloog ( ./) /appkonteineris oleva kataloogiga. Viimane rida määrab /appkonteineris 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 appkausta 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_DIRja looge kausta Dockerfilesees 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:9000real viitame PHP konteinerile selle nime servicejärgi docker-compose.ymlkonfiguratsioonifaili plokis . docker-composeLoob 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.ymlfaili.

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 environmentteenuseploki määratluses oleva suvandiga. Värskendage ~/docker/app/docker-compose.ymlfaili 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/mysqlDockeri 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 upkäivitab käsk ainult need konteinerid, mida pole veel käivitatud. See kontrollib erinevusi teie docker-compose.ymlfaili 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.phpfaili 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-composevaadake ametlikku dokumentatsiooni .

Sõltuvalt teie rakenduse nõuetest ja kasutatavast PHP raamistikust võite soovida lisada rohkem laiendusi. Seda saab hõlpsasti teha, muutes Dockerfilemeie 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 .


Siin on, kuidas kontrollida Hyper-V konteinereid Windows 10 Insideris

Siin on, kuidas kontrollida Hyper-V konteinereid Windows 10 Insideris

Microsoft selgitas uues ajaveebipostituses, kuidas Windows Insiders saab testida Hyper-V konteinereid Windows 10-s – uues virtualiseerimislahenduses, mis võimaldab rakendustel töötada ilma ülejäänud operatsioonisüsteemi mõjutamata.

Kuidas installida programmi CentOS 7 Harbor

Kuidas installida programmi CentOS 7 Harbor

Harbour on avatud lähtekoodiga ettevõtteklassi registriserver, mis salvestab ja levitab Dockeri pilte. Harbour laiendab avatud lähtekoodiga Docker Distribution b

Installige Rancher OS iPXE kaudu

Installige Rancher OS iPXE kaudu

Rancher OS on väga kerge Linuxi distributsioon, mis on üles ehitatud Dockeri ümber. OS ise kaalub umbes 20 MB. See õpetus aitab teid tööle panna

Seadistage CoreOS-is oma Dockeri register

Seadistage CoreOS-is oma Dockeri register

Me kõik teame ja armastame Dockerit – platvormi rakenduste konteinerite loomiseks, haldamiseks ja levitamiseks mitme masina vahel. Docker Inc pakub teenust t

Docker-compose installimine CoreOS-i

Docker-compose installimine CoreOS-i

See artikkel selgitab, kuidas installida CoreOS-i docker-compose. CoreOS-is on /usr/ kaust muutumatu, nii et standardne /usr/local/bin tee pole saadaval

Installige Rancher operatsioonisüsteemi CentOS 7

Installige Rancher operatsioonisüsteemi CentOS 7

Kas kasutate teistsugust süsteemi? Sissejuhatus Rancher on avatud lähtekoodiga platvorm konteinerite käitamiseks ja privaatkonteinerite teenuse loomiseks. Rancher on baas

Installige Docker CE versioonile Ubuntu 18.04

Installige Docker CE versioonile Ubuntu 18.04

Sissejuhatus Docker on rakendus, mis võimaldab juurutada programme, mida käitatakse konteineritena. See oli kirjutatud populaarses Go programmeerimiskeeles

Looge Alpine Linux 3.9.0 Docker Swarm

Looge Alpine Linux 3.9.0 Docker Swarm

Sissejuhatus See juhend näitab teile, kuidas luua ja konfigureerida Dockeri sülem, kasutades mitut Alpine Linux 3.9.0 serverit ja Portainerit. Palun olge teadlik sellest

PHP-rakenduse juurutamine Docker-composei abil

PHP-rakenduse juurutamine Docker-composei abil

PHP-rakendused koosnevad tavaliselt veebiserverist, relatsioonilisest andmebaasisüsteemist ja keeletõlkist endast. Selles õpetuses kasutame võimalust

Koormuse tasakaal Dockeriga

Koormuse tasakaal Dockeriga

Veebirakendust käivitades soovite tavaliselt oma ressurssidest maksimumi võtta, ilma et peaksite oma tarkvara mitmelõimeliseks muutma

Juurutage rakendus Node.js Dockeri abil

Juurutage rakendus Node.js Dockeri abil

See artikkel näitab teile, kuidas juurutada oma Node'i rakendust Dockeri konteineris. Märkus. See õpetus eeldab, et olete Dockeri installinud ja lugenud

Docker CE installimine opsüsteemi CentOS 7

Docker CE installimine opsüsteemi CentOS 7

Dockeri konteinertehnoloogia võimaldab teil käivitada rakendusi konkreetses ja isoleeritud keskkonnas. Docker Community Edition (CE) on frei uus nimi

Juurutage Kubernetes koos Kubeadmiga CentOS 7-s

Juurutage Kubernetes koos Kubeadmiga CentOS 7-s

Ülevaade Selle artikli eesmärk on aidata teil Kubernetese klastri kubeadmiga kiiresti tööle panna. Selles juhendis juurutatakse kaks serverit

Dockeri installimine opsüsteemi CentOS 7

Dockeri installimine opsüsteemi CentOS 7

Kas kasutate teistsugust süsteemi? Docker on rakendus, mis võimaldab juurutada tarkvara virtuaalsetes konteinerites. See oli kirjutatud programmis Go

Docker CE installimine Debian 9-le

Docker CE installimine Debian 9-le

Kas kasutate teistsugust süsteemi? Sissejuhatus Docker on rakendus, mis võimaldab juurutada tarkvara virtuaalsetes konteinerites. See oli kirjas G

Alustage SQL Server 2017 (MS-SQL) kasutamist operatsioonisüsteemis CentOS 7 koos Dockeriga

Alustage SQL Server 2017 (MS-SQL) kasutamist operatsioonisüsteemis CentOS 7 koos Dockeriga

Eeldused Dockeri mootor 1.8+. Vähemalt 4 GB kettaruumi. Vähemalt 4 GB muutmälu. Samm 1. Install Docker SQL-Serveri installimiseks tuleb Docker mus

Kleepuv seanss Docker Swarmiga (CE) Debian 9-s

Kleepuv seanss Docker Swarmiga (CE) Debian 9-s

Kas kasutate teistsugust süsteemi? Sissejuhatus Docker Swarm muudab teie üksikud serverid arvutite klastriks; skaleerimise hõlbustamine, kõrge saadavus an

Kaks Dockeri graafilist haldustööriista: DockerUI ja Shipyard

Kaks Dockeri graafilist haldustööriista: DockerUI ja Shipyard

Rakenduse Vultr Docker abil saate Dockeri oma Vultr serveri eksemplari hõlpsalt juurutada. Samal ajal saate hõlbustada Dockeri haldamist

Installige RancherOS-i Rancher Server

Installige RancherOS-i Rancher Server

Ülevaade RancherOS on uskumatult kerge operatsioonisüsteem (ainult umbes 60 MB), mis käitab süsteemiteenuste käitamiseks PID 0-na Dockeri deemonit.

Kubernetesiga alustamine CentOS 7-s

Kubernetesiga alustamine CentOS 7-s

Kubernetes on avatud lähtekoodiga platvorm, mille Google on välja töötanud konteinerite rakenduste haldamiseks serveriklastris. See põhineb kümnendil ja

Masinate tõus: AI tegelikud rakendused

Masinate tõus: AI tegelikud rakendused

Tehisintellekt ei ole tulevik, see on siin, olevikus. Sellest blogist loe, kuidas tehisintellekti rakendused on mõjutanud erinevaid sektoreid.

DDOS-i rünnakud: lühike ülevaade

DDOS-i rünnakud: lühike ülevaade

Kas olete ka DDOS-i rünnakute ohver ja olete segaduses ennetusmeetodite osas? Oma päringute lahendamiseks lugege seda artiklit.

Kas olete kunagi mõelnud, kuidas häkkerid raha teenivad?

Kas olete kunagi mõelnud, kuidas häkkerid raha teenivad?

Võib-olla olete kuulnud, et häkkerid teenivad palju raha, kuid kas olete kunagi mõelnud, kuidas nad sellist raha teenivad? arutleme.

Googlei revolutsioonilised leiutised, mis muudavad teie elu lihtsaks.

Googlei revolutsioonilised leiutised, mis muudavad teie elu lihtsaks.

Kas soovite näha Google'i revolutsioonilisi leiutisi ja seda, kuidas need leiutised muutsid iga inimese elu tänapäeval? Seejärel lugege ajaveebi, et näha Google'i leiutisi.

Reede oluline osa: mis juhtus tehisintellektiga juhitavate autodega?

Reede oluline osa: mis juhtus tehisintellektiga juhitavate autodega?

Isejuhtivate autode kontseptsioon tehisintellekti abil teedele jõudmiseks on meil juba mõnda aega unistus. Kuid vaatamata mitmele lubadusele pole neid kusagil näha. Lisateabe saamiseks lugege seda ajaveebi…

Tehnoloogiline singulaarsus: inimtsivilisatsiooni kauge tulevik?

Tehnoloogiline singulaarsus: inimtsivilisatsiooni kauge tulevik?

Kuna teadus areneb kiiresti, võttes üle suure osa meie jõupingutustest, suureneb ka oht, et allume seletamatule singulaarsusele. Loe, mida singulaarsus meie jaoks tähendada võiks.

Andmesalvestuse areng – infograafik

Andmesalvestuse areng – infograafik

Andmete säilitamise meetodid on arenenud alates andmete sünnist. See ajaveeb käsitleb infograafiku alusel andmete salvestamise arengut.

Suurandmete viitearhitektuuri kihtide funktsioonid

Suurandmete viitearhitektuuri kihtide funktsioonid

Lugege ajaveebi, et kõige lihtsamal viisil teada saada Big Data Architecture'i erinevaid kihte ja nende funktsioone.

6 hämmastavat eelist nutikate koduseadmete olemasolust meie elus

6 hämmastavat eelist nutikate koduseadmete olemasolust meie elus

Selles digipõhises maailmas on nutikad koduseadmed muutunud elu oluliseks osaks. Siin on mõned nutikate koduseadmete hämmastavad eelised, mis muudavad meie elu elamisväärseks ja lihtsamaks.

macOS Catalina 10.15.4 täienduse värskendus põhjustab rohkem probleeme kui lahendamine

macOS Catalina 10.15.4 täienduse värskendus põhjustab rohkem probleeme kui lahendamine

Hiljuti andis Apple välja macOS Catalina 10.15.4 täiendusvärskenduse probleemide lahendamiseks, kuid tundub, et värskendus põhjustab rohkem probleeme, mille tulemuseks on Maci masinate tellimine. Lisateabe saamiseks lugege seda artiklit