Namestite aplikacijo PHP z uporabo Docker-compose

PHP aplikacije običajno sestavljajo spletni strežnik, sistem relacijske baze podatkov in sam tolmač jezika. V tej vadnici bomo uporabili celoten sklad aplikacij PHP z uporabo dockerja. To je poglobljena vadnica, v kateri bomo zgradili in organizirali vsebnike za Nginx (spletni strežnik), MySQL (sistem baze podatkov) in PHP.

Zaradi te vadnice bomo napisali preprosto aplikacijo, ki bere seznam mest iz baze podatkov in ga prikaže na spletni strani, na ta način bomo prikazali osnovno, a delujočo PHP aplikacijo.

Ta priročnik predvideva, da imate Docker-CE že nameščen in vsaj minimalno delovno znanje o dockerju. V zvezi s tem si lahko ogledate naslednje vadnice:

Konfiguriranje našega delovnega okolja

Realna aplikacija, ki temelji na dockerju, je običajno sestavljena iz več vsebnikov. Ročno upravljanje z njimi zlahka postane precej neurejeno in okorno. Tu pride v poštev docker-compose. Pomaga vam upravljati številne vsebnike prek preproste yamlkonfiguracijske datoteke.

Namestite 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

Ustvarite mapo za shranjevanje vseh potrebnih datotek tega primera in nato cdvanjo. Od zdaj naprej je to naš delovni imenik in vsak ukaz se bo izvajal znotraj te mape in vsaka pot se bo nanašala nanjo. Ta mapa se lahko kasneje omenja kot WORKING_DIR.

mkdir ~/docker
cd ~/docker

Zdaj ustvarite še tri mape.

mkdir php nginx app

V phpmapi bomo zgradili našo sliko PHP po meri, nginxmapa bo vsebovala potrebne datoteke za našo sliko nginx po meri, appmapa pa je, kamor bomo postavili izvorno kodo in konfiguracijo naše vzorčne aplikacije.

Konfiguriranje vsebnika PHP

V tem primeru bomo uporabili php-fpmza povezavo s spletnim strežnikom Nginx. Uporabili bomo uradno osnovno sliko PHP. Vendar pa moramo tudi namestiti in omogočiti nekatere razširitve, da bomo lahko dostopali do baze podatkov. V phpmapi ustvarite datoteko z imenom Dockerfilein vanjo vstavite naslednjo vsebino.

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

Upoštevajte, da uporabljamo alpsko različico uradne slike PHP. Alpine je zelo majhna distribucija, ki je namenjena zabojnikom, saj zagotavlja veliko manjše površine. Upoštevajte tudi uporabo ukaza docker-php-ext-install, uradna slika PHP zagotavlja ta ukaz za olajšanje postopka namestitve in konfiguriranja razširitev PHP.

Zdaj pa zgradimo to sliko Dockerja tako, da izdamo naslednje (znotraj našega WORKING_DIR):

docker build -t vultr-php php/

docker-compose.ymldatoteka

Kot smo že omenili, docker-composevam omogoča upravljanje številnih vsebnikov prek preproste konfiguracijske datoteke. Ta konfiguracijska datoteka se običajno imenuje docker-compose.yml. Ustvarite to datoteko v appmapi.

touch app/docker-compose.yml

Zdaj v to datoteko vstavite naslednjo vsebino.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

To sintakso bomo razložili. Najprej bodite pozorni na prvo vrstico.

version: '2'

To določa različico uporabljene docker-compose.ymlkonfiguracijske datoteke. Naslednja vrstica določa storitve ali z drugimi besedami vsebnike, ki jih je treba zagotoviti.

services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

Upoštevajte, da ima vsaka storitev poseben ključ znotraj servicesbloka. Tukaj navedeno ime bo pozneje uporabljeno za sklicevanje na ta posebni vsebnik. Upoštevajte tudi, da znotraj phpkonfiguracije definiramo sliko, ki se uporablja za zagon vsebnika (to je slika, ki smo jo zgradili prej). Definiramo tudi preslikavo prostornine.

volumes:
  - ./:/app

To pove, docker-composeda preslikate trenutni imenik ( ./) v /appimenik znotraj vsebnika. Zadnja vrstica nastavi /appmapo znotraj vsebnika kot delovni imenik, kar pomeni, da je to mapa, iz katere se privzeto izvajajo vsi prihodnji ukazi znotraj vsebnika.

Zdaj lahko organiziramo naše zabojnike.

cd ~/docker/app
docker-compose up -d

Lahko zaženete naslednji ukaz, da se prepričate, ali je bil vsebnik PHP izveden:

docker ps

Kako izvajati ukaze znotraj vsebnikov

Še vedno znotraj appmape lahko s pomočjo docker-composeukaza zaženemo kateri koli ukaz znotraj definiranega servisnega vsebnika .

docker-compose exec [service] [command]

Oznaka [service]mesta se nanaša na servisni ključ. V našem primeru je bilo to php. Zaženimo ukaz znotraj vsebnika, da preverimo našo različico PHP.

docker-compose exec php php -v

Videli boste naslednji izhod.

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

Konfiguriranje vsebnika Nginx

Tako kot vsebnik PHP, moramo ustvariti sliko po meri za spletni strežnik. Toda v tem primeru moramo le zagotoviti konfiguracijo za naš virtual host. Prepričajte se, da ste znotraj naše WORKING_DIRin ustvarite Dockerfileznotraj nginxmape:

cd ~/docker
touch nginx/Dockerfile

Zdaj v to vstavite naslednjo vsebino Dockerfile:

FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf

Uporabljamo privzeto sliko Nginx, ki temelji na Alpine. V tej datoteki Docker preprosto kopiramo konfiguracijsko datoteko v nastavitev naše aplikacije. Preden zgradite to sliko, ustvarite konfiguracijsko datoteko.

touch nginx/default.conf

Zdaj ga napolnite s to vsebino.

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;
    }
}

Upoštevajte, da se v fastcgi_pass php:9000vrstici sklicujemo na vsebnik PHP po njegovem imenu znotraj servicebloka docker-compose.ymlkonfiguracijske datoteke. Interno docker-composeustvari omrežje in vsaki od definiranih storitev dodeli ime storitve kot ime gostitelja. Zdaj lahko zgradimo sliko Nginx.

docker build -t vultr-nginx nginx/

Posodabljanje docker-compose.yml

Zdaj posodobite app/docker-compose.ymldatoteko.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app
  web:
    image: vultr-nginx
    volumes:
      - ./:/app
    depends_on:
      - php
    ports:
      - 80:80

Dodali smo samo novo storitev. Konfiguracija je skoraj enaka, razen naslednjega.

depends_on:
  - php
ports:
  - 80:80

Ko vsebnik Nginx potrebuje, da se storitev PHP v celoti inicializira, to zahtevo vsilimo v depends_onopciji. portsKljuč konfiguracija preslika vrata gostitelja na vrata posode, tu zemljevid pristanišče 80v gostitelju do pristanišča 80v posodi.

Zdaj ustvarite datoteko, imenovano index.phpznotraj appmape, in vanjo vstavite naslednje.

<?php phpinfo();

Prepričajte se, da so vrata 80dostopna prek vašega požarnega zidu in izvedite naslednje.

cd ~/docker/app
docker-compose up -d

Še enkrat preverite, ali je storitev vzpostavljena.

docker ps

Odprite brskalnik in dostopajte do [vultr-instance-ip]. IP naslov svojega primerka Vultr lahko ugotovite tako, da zaženete naslednje.

hostname -I

Videli boste stran z informacijami o PHP.

Konfiguriranje vsebnika MySQL

Uradna slika MySQL vam omogoča, da konfigurirate vsebnik s preprostimi spremenljivkami okolja. To je mogoče storiti z environmentmožnostjo znotraj definicije servisnega bloka. Posodobite ~/docker/app/docker-compose.ymldatoteko na naslednje.

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:

Zdaj smo definirali novo storitev za bazo podatkov. Bodite pozorni na črto dbdata:/var/lib/mysql. S tem se pot na vsebniku /var/lib/mysqlpriklopi na trajni nosilec, ki ga upravlja Docker, na ta način se podatki baze podatkov ohranijo tudi po odstranitvi vsebnika. Ta nosilec je treba definirati v bloku najvišje ravni, kot lahko vidite na koncu datoteke.

Preden organiziramo našo novo konfiguracijo, prenesite vzorčno bazo podatkov MySQL. Uradni MySQL dokumentacija vsebuje nekaj vzorčnih baz podatkov. Uporabljali bomo svetovno znano bazo podatkov. Ta zbirka podatkov ponuja seznam držav in mest. Če želite prenesti ta vzorec, v naši mapi aplikacije izvedite naslednje.

curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz

Zdaj pa organiziramo naše zabojnike.

docker-compose up -d

Kot ste morda že opazili, docker-compose upukaz zažene samo vsebnike, ki še niso zagnani. Preverja razlike med vašo docker-compose.ymldatoteko in trenutno konfiguracijo zagnanih vsebnikov.

Še enkrat preverite, ali je bil vsebnik MySQL zagnan.

docker ps

Zdaj napolnite svetovno bazo podatkov.

docker-compose exec -T mysql mysql -uroot -proot world < world.sql

Lahko preverite, ali je bila zbirka podatkov napolnjena, tako da izberete podatke neposredno iz baze podatkov. Najprej odprite poziv MySQL znotraj vsebnika.

docker-compose exec mysql mysql -uroot -proot world

V pozivu MySQL zaženite naslednje.

select * from city limit 10;

Videli boste seznam mest. Zdaj zaprite poziv MySQL.

mysql> exit

Izdelava naše aplikacije

Zdaj, ko so vsi potrebni vsebniki pripravljeni in delujejo, se lahko osredotočimo na našo vzorčno aplikacijo. Posodobite app/index.phpdatoteko na naslednje.

<?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>

Če dostopate [vultr-instance-ip]v spletnem brskalniku, boste videli seznam najbolj naseljenih mest na svetu. Čestitamo, namestili ste popolnoma delujočo aplikacijo PHP z uporabo dockerja.

Zaključek

V tej vadnici sem korak za korakom pokazal, kako konfigurirati popolnoma delujočo aplikacijo PHP. Zgradili smo slike po meri za PHP in Nginx ter konfigurirali docker-compose za orkestriranje naših vsebnikov. Kljub temu, da je zelo osnovna in preprosta, ta nastavitev odraža resnični življenjski scenarij.

V tem priročniku smo sestavili in označili naše slike lokalno. Za bolj prilagodljivo nastavitev lahko te slike potisnete v register Docker . Lahko pritisnete na uradni register dockerjev ali celo nastavite svoj lastni register dockerjev. V vsakem primeru vam bo to omogočilo, da svoje slike zgradite na enem gostitelju in jih uporabite na drugem.

Za podrobnejšo uporabo docker-compose, si oglejte uradno dokumentacijo .

Glede na zahteve vaše aplikacije in okvir PHP, ki ga uporabljate, boste morda želeli dodati več razširitev. To lahko enostavno storite tako, da spremenite Dockerfileuporabljeno za izdelavo naše slike PHP po meri. Vendar pa nekatere razširitve potrebujejo dodatne odvisnosti za namestitev v vsebnik. Za pregled osnovnih zahtev vsake razširitve si oglejte seznam razširitev v uradni dokumentaciji PHP .


Tukaj je opisano, kako preveriti vsebnike Hyper-V v sistemu Windows 10 Insider

Tukaj je opisano, kako preveriti vsebnike Hyper-V v sistemu Windows 10 Insider

Microsoft je v novi objavi v spletnem dnevniku pojasnil, kako lahko Windows Insiders testirajo vsebnike Hyper-V v sistemu Windows 10, novi virtualizacijski rešitvi, ki omogoča izvajanje aplikacij, ne da bi to vplivalo na preostali del vašega operacijskega sistema.

Kako namestiti Harbor na CentOS 7

Kako namestiti Harbor na CentOS 7

Harbor je odprtokodni registrski strežnik poslovnega razreda, ki shranjuje in distribuira slike Docker. Harbor razširi odprtokodno Docker Distribution b

Namestite Rancher OS prek iPXE

Namestite Rancher OS prek iPXE

Rancher OS je zelo lahka distribucija Linuxa, zgrajena okoli Dockerja. Sam OS tehta približno 20 MB. Ta vadnica vas bo pripravila na začetek

V CoreOS nastavite svoj lasten register Docker

V CoreOS nastavite svoj lasten register Docker

Vsi poznamo in imamo radi Docker, platformo za ustvarjanje, upravljanje in distribucijo aplikacijskih vsebnikov na več računalnikih. Docker Inc. ponuja storitev t

Namestitev docker-compose na CoreOS

Namestitev docker-compose na CoreOS

Ta članek pojasnjuje, kako namestiti docker-compose v CoreOS. V CoreOS-u je mapa /usr/ nespremenljiva, zato standardna pot /usr/local/bin ni na voljo za

Namesti Rancher na CentOS 7

Namesti Rancher na CentOS 7

Uporaba drugega sistema? Uvod Rancher je odprtokodna platforma za vodenje kontejnerjev in izgradnjo zasebne storitve kontejnerja. Rancher je osnova

Namestite Docker CE na Ubuntu 18.04

Namestite Docker CE na Ubuntu 18.04

Uvod Docker je aplikacija, ki nam omogoča uvajanje programov, ki se izvajajo kot vsebniki. Napisana je bila v priljubljenem programskem jeziku Go

Ustvarite Docker Swarm na Alpine Linux 3.9.0

Ustvarite Docker Swarm na Alpine Linux 3.9.0

Uvod Ta priročnik vam bo pokazal, kako ustvariti in konfigurirati Docker roj z uporabo več strežnikov Alpine Linux 3.9.0 in Portainerja. Prosimo, da se zavedate, da

Namestite aplikacijo PHP z uporabo Docker-compose

Namestite aplikacijo PHP z uporabo Docker-compose

PHP aplikacije običajno sestavljajo spletni strežnik, sistem relacijske baze podatkov in sam tolmač jezika. V tej vadnici bomo vzvod

Uravnoteženost obremenitve z Dockerjem

Uravnoteženost obremenitve z Dockerjem

Ko zaženete spletno aplikacijo, običajno želite kar najbolje izkoristiti svoje vire, ne da bi morali svojo programsko opremo pretvoriti v uporabo večnitnega o

Namestite aplikacijo Node.js z uporabo Dockerja

Namestite aplikacijo Node.js z uporabo Dockerja

Ta članek vam bo pokazal, kako namestiti aplikacijo Node v vsebniku Docker. Opomba: Ta vadnica predpostavlja, da imate nameščen in prebran Docker

Namestitev Docker CE na CentOS 7

Namestitev Docker CE na CentOS 7

Tehnologija vsebnika Docker vam omogoča zagon aplikacij v določenem in izoliranem okolju. Docker Community Edition (CE) je novo ime za fre

Namestite Kubernetes s Kubeadmom na CentOS 7

Namestite Kubernetes s Kubeadmom na CentOS 7

Pregled Namen tega članka je pomagati, da gručo Kubernetes zaženete in zaženete s kubeadmom. Ta vodnik bo namestil dva strežnika na

Namestitev Dockerja na CentOS 7

Namestitev Dockerja na CentOS 7

Uporaba drugega sistema? Docker je aplikacija, ki omogoča namestitev programske opreme znotraj virtualnih vsebnikov. Napisano je v programu Go

Namestitev Docker CE v Debian 9

Namestitev Docker CE v Debian 9

Uporaba drugega sistema? Uvod Docker je aplikacija, ki omogoča namestitev programske opreme znotraj virtualnih vsebnikov. Zapisano je bilo v G

Začnite uporabljati SQL Server 2017 (MS-SQL) na CentOS 7 z Dockerjem

Začnite uporabljati SQL Server 2017 (MS-SQL) na CentOS 7 z Dockerjem

Predpogoji Docker engine 1.8+. Najmanj 4 GB prostora na disku. Najmanj 4 GB RAM-a. 1. korak. Namestite Docker Za namestitev SQL-Serverja je potrebno Docker

Sticky Session with Docker Swarm (CE) na Debianu 9

Sticky Session with Docker Swarm (CE) na Debianu 9

Uporaba drugega sistema? Uvod Docker Swarm spremeni vaše posamezne strežnike v gručo računalnikov; olajšanje skaliranja, visoka razpoložljivost an

Dve Dockerjevi grafični orodji za upravljanje: DockerUI in ladjedelnica

Dve Dockerjevi grafični orodji za upravljanje: DockerUI in ladjedelnica

S pomočjo aplikacije Vultr Docker lahko preprosto namestite Docker na vaš primerek strežnika Vultr. Medtem lahko olajšate nalogo upravljanja Dockerja

Namesti Rancher Server na RancherOS

Namesti Rancher Server na RancherOS

Pregled RancherOS je neverjetno lahek operacijski sistem (le približno 60 MB), ki poganja sistemski demon Docker kot PID 0 za izvajanje sistemskih storitev

Kako začeti uporabljati Kubernetes na CentOS 7

Kako začeti uporabljati Kubernetes na CentOS 7

Kubernetes je odprtokodna platforma, ki jo je razvil Google za upravljanje kontejnerskih aplikacij v gruči strežnikov. Gradi na desetletju in

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več