Settu upp PHP forrit með því að nota Docker-compose

PHP forrit eru venjulega samsett af vefþjóni, venslagagnagrunnskerfi og tungumálatúlknum sjálfum. Í þessari kennslu munum við nýta fullan PHP forritsstafla með því að nota docker. Þetta er ítarlegt kennsluefni þar sem við ætlum að smíða og skipuleggja gáma fyrir Nginx (vefþjóninn), MySQL (gagnagrunnskerfið) og PHP.

Fyrir sakir þessarar kennslu munum við skrifa einfalt forrit sem les lista yfir borgir úr gagnagrunni og birtir það á vefsíðu, þannig munum við sýna grunn, en virka, PHP forrit.

Þessi handbók gerir ráð fyrir að þú hafir Docker-CE þegar uppsettan og að minnsta kosti lágmarks þekkingu á Docker. Fyrir það mál geturðu skoðað eftirfarandi kennsluefni:

Að stilla vinnuumhverfi okkar

Raunverulegt forrit sem byggir á bryggju mun venjulega vera samsett úr nokkrum ílátum. Að stjórna þessu handvirkt getur auðveldlega orðið frekar sóðalegt og fyrirferðarmikið. Það er þar sem docker-compose kemur við sögu. Það hjálpar þér að stjórna fjölda gáma í gegnum einfalda yamlstillingarskrá.

Settu upp 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

Búðu til möppu til að geyma allar nauðsynlegar skrár af þessu dæmi og síðan cdinn í það. Héðan í frá er þetta vinnuskráin okkar og hver skipun verður keyrð inni í þessari möppu og vísað verður í hverja slóð miðað við hana. Hægt er að vísa í þessa möppu síðar sem WORKING_DIR.

mkdir ~/docker
cd ~/docker

Búðu til þrjár möppur í viðbót.

mkdir php nginx app

The phpmappa er þar sem við munum byggja sérsniðin PHP ímynd okkar, nginxmappa mun halda nauðsynlegar skrár til sérsniðna nginx ímynd okkar og appmappa er þar sem við munum vera að setja kóðann og uppsetningu sýnishorn umsókn okkar.

Að stilla PHP ílátið

Í þessu dæmi ætlum við að nota php-fpmtil að tengjast Nginx vefþjóninum. Við munum nota opinberu PHP grunnmyndina. Hins vegar þurfum við líka að setja upp og virkja nokkrar viðbætur svo við getum fengið aðgang að gagnagrunninum. Inni í phpmöppunni búðu til skrá sem heitir Dockerfileog settu eftirfarandi innihald í hana.

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

Athugaðu að við erum að nota Alpine útgáfuna af opinberu PHP myndinni. Alpine er mjög pínulítil dreifing sem miðar að gámum með því að gefa mun minni fótspor. Athugaðu líka notkun skipunarinnar docker-php-ext-install, opinbera PHP myndin veitir þessa skipun til að auðvelda uppsetningu og stillingu PHP viðbóta.

Nú skulum við byggja þessa Docker mynd með því að gefa út eftirfarandi (inni í okkar WORKING_DIR):

docker build -t vultr-php php/

The docker-compose.ymlskrá

Eins og áður hefur komið fram, docker-composegerir þér kleift að stjórna fjölda gáma í gegnum einfalda stillingarskrá. Þessi stillingarskrá heitir venjulega docker-compose.yml. Búðu til þessa skrá í appmöppunni.

touch app/docker-compose.yml

Settu nú eftirfarandi innihald í þessa skrá.

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

Við munum útskýra þessa setningafræði. Fyrst skaltu athuga fyrstu línuna.

version: '2'

Þetta tilgreinir útgáfu af docker-compose.ymlstillingarskránni sem notuð er. Næsta lína tilgreinir þjónustuna, eða með öðrum orðum, gámana sem á að útvega.

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

Athugaðu að hver þjónusta hefur sérstakan lykil inni í servicesblokkinni. Nafnið sem tilgreint er hér verður notað til að vísa til þessa tiltekna íláts síðar. Athugaðu líka að inni í phpuppsetningunni skilgreinum við myndina sem notuð er til að keyra ílátið (þetta er myndin sem við byggðum áður). Við skilgreinum einnig magnkortlagningu.

volumes:
  - ./:/app

Þetta segir docker-composetil um að kortleggja núverandi möppu ( ./) í /appmöppuna inni í ílátinu. Síðasta línan setur /appmöppuna inni í gámnum sem vinnuskrá, sem þýðir að þetta er mappan þar sem allar framtíðarskipanir inni í gámi eru sjálfgefið keyrðar úr.

Við getum nú skipulagt gámana okkar.

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

Þú getur keyrt eftirfarandi skipun til að ganga úr skugga um að PHP ílátið hafi verið keyrt:

docker ps

Hvernig á að framkvæma skipanir inni í gámunum

Enn inni í appmöppunni getum við keyrt hvaða skipun sem er í skilgreindum þjónustuíláti með hjálp docker-composeskipunarinnar.

docker-compose exec [service] [command]

The [service]staðgengill vísar til þjónustu lykill. Í okkar tilviki var þetta php. Við skulum keyra skipun inni í ílátinu til að athuga PHP útgáfuna okkar.

docker-compose exec php php -v

Þú munt sjá eftirfarandi úttak.

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

Stillir Nginx ílátið

Rétt eins og PHP ílátið þurfum við að búa til sérsniðna mynd fyrir vefþjóninn. En í þessu tilfelli þurfum við bara að gefa upp stillingar fyrir virtual host. Gakktu úr skugga um að þú sért inni hjá okkur WORKING_DIRog búðu til Dockerfileinni í nginxmöppunni:

cd ~/docker
touch nginx/Dockerfile

Settu nú eftirfarandi innihald í þetta Dockerfile:

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

Við erum að nota sjálfgefna Nginx mynd byggða á Alpine. Í þessari Docker skrá afritum við einfaldlega stillingarskrá inn í forritauppsetninguna okkar. Áður en þú byggir þessa mynd skaltu búa til stillingarskrá.

touch nginx/default.conf

Fylltu það nú með þessu efni.

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

Athugaðu að við fastcgi_pass php:9000línuna erum við að vísa til PHP ílátsins með nafni hans inni í servicereitnum í docker-compose.ymlstillingarskránni. Innbyrðis docker-composeskapar net og gefur nafnið þjónustu sem gestgjafi nafn til hvers sem skilgreind. Við getum nú smíðað Nginx myndina.

docker build -t vultr-nginx nginx/

Uppfærsla docker-compose.yml

Uppfærðu nú app/docker-compose.ymlskrána.

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

Við höfum aðeins bætt við nýrri þjónustu. Uppsetningin er næstum sú sama, nema eftirfarandi.

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

The official MySQL image allows you to configure the container through simple environment variables. This can be done with an environment option inside the service block definition. Update the ~/docker/app/docker-compose.yml file to the following.

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:

Now we've defined a new service for the database. Notice the line dbdata:/var/lib/mysql. This mounts the path on the container /var/lib/mysql to a persistent volume managed by Docker, this way the database data persists after the container is removed. This volume needs to be defined in a top-level block as you can see in the end of the file.

Áður en við skipuleggjum nýju uppsetninguna okkar skulum við hlaða niður sýnishorni af MySQL gagnagrunni. The opinber MySQL gögnum gefur nokkur sýnishorn gagnagrunna. Við munum nota hinn þekkta heimsgagnagrunn. Þessi gagnagrunnur veitir lista yfir lönd og borgir. Til að hlaða niður þessu sýnishorni skaltu framkvæma eftirfarandi í appmöppunni okkar.

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

Nú skulum við skipuleggja gámana okkar.

docker-compose up -d

Eins og þú hefur kannski þegar tekið eftir, þá docker-compose upbyrjar skipunin aðeins ílátin sem eru ekki þegar ræst. Það athugar muninn á docker-compose.ymlskránni þinni og núverandi uppsetningu hlaupandi gáma.

Einu sinni enn, athugaðu hvort MySQL ílátið hafi verið ræst.

docker ps

Fylltu nú heimsgagnagrunninn.

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

Þú getur staðfest að gagnagrunnurinn hafi verið fylltur með því að velja gögn beint úr gagnagrunninum. Fáðu fyrst aðgang að MySQL kvaðningu inni í ílátinu.

docker-compose exec mysql mysql -uroot -proot world

Í MySQL hvetjunni skaltu keyra eftirfarandi.

select * from city limit 10;

Þú munt sjá lista yfir borgir. Hættu nú MySQL hvetjunni.

mysql> exit

Byggja umsókn okkar

Nú þegar allir nauðsynlegir gámar eru komnir í gang getum við einbeitt okkur að sýnishornsforritinu okkar. Uppfærðu app/index.phpskrána í eftirfarandi.

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

Ef þú opnar [vultr-instance-ip]í vafra muntu sjá lista yfir fjölmennustu borgir í heimi. Til hamingju, þú hefur sett upp fullvirkt PHP forrit með því að nota docker.

Niðurstaða

Í þessari kennslu hef ég sýnt skref fyrir skref hvernig á að stilla fullvirkt PHP forrit. Við smíðuðum sérsniðnar myndir fyrir PHP og Nginx og stilltum docker-compose til að skipuleggja ílátin okkar. Þrátt fyrir að vera mjög einföld og einföld endurspeglar þessi uppsetning raunveruleikaatburðarás.

Í þessari handbók höfum við smíðað og merkt myndirnar okkar á staðnum. Til að fá sveigjanlegri uppsetningu geturðu ýtt þessum myndum í tengikví . Þú getur ýtt á opinberu bryggjuskrána eða jafnvel sett upp þína eigin bryggjuskrá. Í öllum tilvikum mun þetta gera þér kleift að byggja myndirnar þínar á einum gestgjafa og nota þær á öðrum.

Til að fá ítarlegri notkun á docker-compose, ættir þú að vísa til opinberu skjala .

Það fer eftir umsóknarkröfum þínum og PHP ramma sem þú notar, þú gætir viljað bæta við fleiri viðbótum. Þetta er auðveldlega hægt að gera með því að breyta því sem er Dockerfilenotað til að byggja upp sérsniðna PHP mynd okkar. Hins vegar þurfa sumar viðbætur auka ósjálfstæði til að vera sett upp í ílátinu. Þú ættir að vísa til lista yfir viðbætur í PHP opinberu skjölunum til að fara yfir grunnkröfur hverrar viðbyggingar.


Svona á að skoða Hyper-V gáma á Windows 10 Insider

Svona á að skoða Hyper-V gáma á Windows 10 Insider

Microsoft hefur útskýrt í nýrri bloggfærslu hvernig Windows Insiders geta prófað Hyper-V gáma á Windows 10, ný virtualization lausn til að leyfa forritum að keyra án þess að hafa áhrif á restina af stýrikerfinu þínu.

Hvernig á að setja upp Harbor á CentOS 7

Hvernig á að setja upp Harbor á CentOS 7

Harbor er opinn uppspretta fyrirtækjaskrármiðlara sem geymir og dreifir Docker myndum. Harbor framlengir opinn uppspretta Docker Distribution b

Settu upp Rancher OS í gegnum iPXE

Settu upp Rancher OS í gegnum iPXE

Rancher OS er mjög létt Linux dreifing byggð í kringum Docker. Stýrikerfið sjálft vegur um 20MB. Þessi kennsla mun koma þér í gang með

Á CoreOS, settu upp þína eigin Docker Registry

Á CoreOS, settu upp þína eigin Docker Registry

Við þekkjum öll og elskum Docker, vettvang til að búa til, stjórna og dreifa forritagámum yfir margar vélar. Docker Inc. veitir þjónustu t

Setur upp docker-compose á CoreOS

Setur upp docker-compose á CoreOS

Þessi grein útskýrir hvernig á að setja upp docker-compose á CoreOS. Í CoreOS er /usr/ mappan óbreytanleg þannig að staðlaða /usr/local/bin slóðin er ekki tiltæk fyrir

Settu upp Rancher á CentOS 7

Settu upp Rancher á CentOS 7

Að nota annað kerfi? Inngangur Rancher er opinn uppspretta vettvangur til að keyra gáma og byggja upp einkagámaþjónustu. Rancher er grunnur

Settu upp Docker CE á Ubuntu 18.04

Settu upp Docker CE á Ubuntu 18.04

Inngangur Docker er forrit sem gerir okkur kleift að dreifa forritum sem eru keyrð sem gámar. Það var skrifað á hinu vinsæla Go forritunarmáli

Búðu til Docker Swarm á Alpine Linux 3.9.0

Búðu til Docker Swarm á Alpine Linux 3.9.0

Inngangur Þessi handbók mun sýna þér hvernig á að búa til og stilla Docker-sveim með því að nota marga Alpine Linux 3.9.0 netþjóna og Portainer. Vinsamlegast athugið að

Settu upp PHP forrit með því að nota Docker-compose

Settu upp PHP forrit með því að nota Docker-compose

PHP forrit eru venjulega samsett af vefþjóni, venslagagnagrunnskerfi og tungumálatúlknum sjálfum. Í þessari kennslu munum við vera skuldsett

Hleðslujöfnuður með Docker

Hleðslujöfnuður með Docker

Þegar þú keyrir vefforrit vilt þú venjulega fá sem mest út úr auðlindum þínum án þess að þurfa að breyta hugbúnaðinum þínum í að nota fjölþráða o

Settu upp Node.js forrit með því að nota Docker

Settu upp Node.js forrit með því að nota Docker

Þessi grein mun sýna þér hvernig á að dreifa Node forritinu þínu í Docker gám. Athugið: Þessi kennsla gerir ráð fyrir að þú hafir Docker uppsettan og lesinn

Uppsetning Docker CE á CentOS 7

Uppsetning Docker CE á CentOS 7

Docker gámatækni gerir þér kleift að keyra forrit í ákveðnu og einangruðu umhverfi. Docker Community Edition (CE) er nýja nafnið á fre

Settu upp Kubernetes með Kubeadm á CentOS 7

Settu upp Kubernetes með Kubeadm á CentOS 7

Yfirlit Þessari grein er ætlað að hjálpa þér að koma Kubernetes klasa í gang með kubeadm á skömmum tíma. Þessi handbók mun setja upp tvo netþjóna, á

Uppsetning Docker á CentOS 7

Uppsetning Docker á CentOS 7

Að nota annað kerfi? Docker er forrit sem gerir kleift að dreifa hugbúnaði innan sýndargáma. Það var skrifað í Go forritinu

Uppsetning Docker CE á Debian 9

Uppsetning Docker CE á Debian 9

Að nota annað kerfi? Inngangur Docker er forrit sem gerir kleift að dreifa hugbúnaði innan sýndargáma. Það var skrifað í G

Byrjaðu með SQL Server 2017 (MS-SQL) á CentOS 7 með Docker

Byrjaðu með SQL Server 2017 (MS-SQL) á CentOS 7 með Docker

Forkröfur Docker vél 1.8+. Lágmark 4GB af diskplássi. Lágmark 4GB af vinnsluminni. Skref 1. Settu upp Docker Til að setja upp SQL-þjóninn, Docker mus

Tvö grafísk stjórnunarverkfæri Docker: DockerUI og Shipyard

Tvö grafísk stjórnunarverkfæri Docker: DockerUI og Shipyard

Með hjálp Vultr Docker forritsins geturðu auðveldlega sett Docker á Vultr netþjóninn þinn. Á meðan geturðu auðveldað Docker stjórnun verkefnis

Settu upp Rancher Server á RancherOS

Settu upp Rancher Server á RancherOS

Yfirlit RancherOS er ótrúlega létt stýrikerfi (aðeins um 60 MB) sem keyrir Docker púkk kerfisins sem PID 0 til að keyra kerfisþjónustur

Byrjaðu með Kubernetes á CentOS 7

Byrjaðu með Kubernetes á CentOS 7

Kubernetes er opinn uppspretta vettvangur þróaður af Google til að stjórna gámaforritum yfir þyrping netþjóna. Það byggir á áratug og

Settu upp Rancher á Ubuntu 16.04

Settu upp Rancher á Ubuntu 16.04

Að nota annað kerfi? Inngangur Rancher er opinn uppspretta vettvangur til að keyra gáma og byggja upp einkagámaþjónustu. Rancher er grunnur

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Gervigreind er ekki í framtíðinni, hún er hér í nútímanum Í þessu bloggi Lestu hvernig gervigreindarforrit hafa haft áhrif á ýmsa geira.

DDOS árásir: Stutt yfirlit

DDOS árásir: Stutt yfirlit

Ertu líka fórnarlamb DDOS árása og ruglaður með forvarnaraðferðirnar? Lestu þessa grein til að leysa spurningar þínar.

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Hefur þú einhvern tíma velt því fyrir þér hvernig tölvuþrjótar græða peninga?

Þú gætir hafa heyrt að tölvuþrjótar græða mikið af peningum, en hefur þú einhvern tíma velt því fyrir þér hvernig þeir vinna sér inn svona peninga? við skulum ræða.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Byltingarkenndar uppfinningar frá Google sem munu auðvelda lífi þínu.

Viltu sjá byltingarkenndar uppfinningar frá Google og hvernig þessar uppfinningar breyttu lífi hvers manns í dag? Lestu síðan til að blogga til að sjá uppfinningar frá Google.

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Föstudagur Nauðsynlegur: Hvað varð um gervigreindardrifna bíla?

Hugmyndin um að sjálfkeyrandi bílar fari á göturnar með hjálp gervigreindar er draumur sem við höfum átt um tíma núna. En þrátt fyrir nokkur loforð eru þau hvergi sjáanleg. Lestu þetta blogg til að læra meira…

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Tæknileg sérkenni: Fjarlæg framtíð mannlegrar siðmenningar?

Þar sem vísindin þróast hratt og taka yfir mikið af viðleitni okkar, eykst hættan á því að verða fyrir óútskýranlegri einstæðu. Lestu, hvað sérkenni gæti þýtt fyrir okkur.

Þróun gagnageymslu – Infographic

Þróun gagnageymslu – Infographic

Geymsluaðferðir gagna hafa verið að þróast gæti verið frá fæðingu gagna. Þetta blogg fjallar um þróun gagnageymslu á grundvelli upplýsingamynda.

Virkni Big Data Reference Architecture Layers

Virkni Big Data Reference Architecture Layers

Lestu bloggið til að þekkja mismunandi lög í Big Data Architecture og virkni þeirra á einfaldasta hátt.

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

6 ótrúlegir kostir þess að hafa snjall heimilistæki í lífi okkar

Í þessum stafræna heimi hafa snjallheimilistæki orðið afgerandi hluti af lífi. Hér eru nokkrir ótrúlegir kostir snjallheimatækja um hvernig þau gera líf okkar þess virði að lifa því og einfaldara.

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

macOS Catalina 10.15.4 viðbót uppfærsla veldur fleiri vandamálum en að leysa

Nýlega gaf Apple út macOS Catalina 10.15.4 viðbótaruppfærslu til að laga vandamál en svo virðist sem uppfærslan sé að valda fleiri vandamálum sem leiða til múrsteins á Mac vélum. Lestu þessa grein til að læra meira