Ota PHP-sovellus käyttöön Docker-compose-sovelluksella

PHP-sovellukset koostuvat yleensä verkkopalvelimesta, relaatiotietokantajärjestelmästä ja itse kielitulkista. Tässä opetusohjelmassa hyödynnämme täyttä PHP-sovelluspinoa Dockerin avulla. Tämä on syvällinen opetusohjelma, jossa aiomme rakentaa ja organisoida säilöjä Nginxille (verkkopalvelin), MySQL:lle (tietokantajärjestelmä) ja PHP:lle.

Tätä opetusohjelmaa varten kirjoitamme yksinkertaisen sovelluksen, joka lukee luettelon kaupungeista tietokannasta ja näyttää sen web-sivulla. Tällä tavalla esittelemme perus, mutta toimivan PHP-sovelluksen.

Tässä oppaassa oletetaan, että sinulla on jo asennettuna Docker-CE ja sinulla on vähintään minimaaliset telakointitaidot. Tätä varten voit tarkastella seuraavia opetusohjelmia:

Työympäristömme konfigurointi

Tosielämän docker-pohjainen sovellus koostuu tyypillisesti useista konteista. Näiden manuaalinen hallinta voi helposti tulla melko sotkuiseksi ja hankalaksi. Siellä docker-säveltäminen tulee peliin. Se auttaa hallitsemaan useita säilöjä yksinkertaisen yamlmääritystiedoston avulla.

Asenna 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

Luo kansio, jossa on kaikki tämän esimerkin tarvittavat tiedostot ja sitten cdsiihen. Tästä eteenpäin tämä on työhakemistomme ja jokainen komento suoritetaan tässä kansiossa ja jokaiseen polkuun viitataan suhteessa siihen. Tähän kansioon voidaan viitata myöhemmin nimellä WORKING_DIR.

mkdir ~/docker
cd ~/docker

Luo nyt vielä kolme kansiota.

mkdir php nginx app

phpKansio sinne me rakennamme mukautetun PHP kuvassa, nginxkansio järjestää tarvittavat tiedostot asiakkaillemme nginx kuva ja appkansio on, jos aiomme asettaa lähdekoodi ja kokoonpanon otoksemme sovelluksen.

PHP-säilön määrittäminen

Tässä esimerkissä aiomme käyttää php-fpmyhteyden muodostamiseen Nginx-verkkopalvelimeen. Käytämme virallista PHP-peruskuvaa. Meidän on kuitenkin myös asennettava ja otettava käyttöön joitain laajennuksia, jotta voimme käyttää tietokantaa. Sisällä phpkansio luoda tiedoston nimeltä Dockerfileja laita seuraava sisältö siihen.

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

Huomaa, että käytämme virallisen PHP-kuvan Alpine-versiota. Alpine on hyvin pieni jakelu, joka on suunnattu konteille tarjoamalla paljon pienempiä jalanjälkiä. Huomaa myös komennon käyttö docker-php-ext-install, virallinen PHP-kuva tarjoaa tämän komennon helpottaakseen PHP-laajennusten asennusta ja määrittämistä.

Rakennetaan nyt tämä Docker-kuva julkaisemalla seuraava (sisällämme WORKING_DIR):

docker build -t vultr-php php/

docker-compose.ymltiedosto

Kuten jo mainittiin, docker-composevoit hallita useita säilöjä yksinkertaisen määritystiedoston avulla. Tämä asetustiedosto on tavallisesti nimeltään docker-compose.yml. Luo tämä tiedosto appkansioon.

touch app/docker-compose.yml

Laita seuraava sisältö tähän tiedostoon.

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

Selitämme tämän syntaksin. Huomioi ensin ensimmäinen rivi.

version: '2'

Tämä määrittää käytetyn docker-compose.ymlkokoonpanotiedoston version . Seuraavalla rivillä määritellään palvelut tai toisin sanoen varattavat kontit.

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

Huomaa, että jokaisella palvelulla on erityinen avain serviceslohkon sisällä . Tässä määritettyä nimeä käytetään viittaamaan tähän säilöön myöhemmin. Huomaa myös, että phpmääritämme kokoonpanon sisällä säilön suorittamiseen käytettävän kuvan (tämä on aiemmin luomamme kuva). Määrittelemme myös tilavuuskartoituksen.

volumes:
  - ./:/app

Tämä käskee docker-composeyhdistämään nykyisen hakemiston ( ./) /appsäilön sisällä olevaan hakemistoon. Viimeinen rivi asettaa /appsäilön sisällä olevan kansion työhakemistoksi, mikä tarkoittaa, että tämä on kansio, josta kaikki tulevat säilön sisällä olevat komennot suoritetaan oletusarvoisesti.

Voimme nyt järjestää konttimme.

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

Voit suorittaa seuraavan komennon varmistaaksesi, että PHP-säilö suoritettiin:

docker ps

Kuinka suorittaa komentoja säilöjen sisällä

Edelleen appkansion sisällä voimme suorittaa minkä tahansa komennon määritetyn palvelusäiliön sisällä docker-composekomennon avulla.

docker-compose exec [service] [command]

[service]Paikkamerkki viittaa Service Key. Meidän tapauksessamme tämä oli php. Suoritetaan komento säilön sisällä tarkistaaksemme PHP-versiomme.

docker-compose exec php php -v

Näet seuraavan tulosteen.

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

Nginx-säilön määrittäminen

Aivan kuten PHP-säilössä, meidän on luotava mukautettu kuva verkkopalvelimelle. Mutta tässä tapauksessa meidän on vain annettava kokoonpano virtual host. Varmista, että olet sisällä meidän WORKING_DIRja luoda Dockerfilesisälle nginxkansio:

cd ~/docker
touch nginx/Dockerfile

Laita tähän nyt seuraava sisältö Dockerfile:

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

Käytämme Alpine-pohjaista oletusarvoista Nginx-kuvaa. Kopioimme tässä Docker-tiedostossa määritystiedoston sovelluksemme asetuksiin. Luo määritystiedosto ennen tämän kuvan rakentamista.

touch nginx/default.conf

Täytä se nyt tällä sisällöllä.

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

Huomaa, että fastcgi_pass php:9000rivillä viittaamme PHP-säilöön sen nimellä määritystiedoston servicelohkossa docker-compose.yml. docker-composeLuo sisäisesti verkon ja määrittää palvelun nimen isäntänimeksi jokaiselle määritetylle palvelulle. Voimme nyt rakentaa Nginx-kuvan.

docker build -t vultr-nginx nginx/

Päivitetään docker-compose.yml

Päivitä nyt app/docker-compose.ymltiedosto.

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

Olemme vain lisänneet uuden palvelun. Kokoonpano on lähes sama, lukuun ottamatta seuraavia.

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.

Ennen kuin suunnittelemme uuden kokoonpanomme, ladataan esimerkki MySQL-tietokannasta. Viralliset MySQL asiakirjat esitetään joitakin Mallitietokannat. Käytämme tunnettua maailmantietokantaa. Tämä tietokanta tarjoaa luettelon maista ja kaupungeista. Lataa tämä esimerkki suorittamalla seuraava sovelluskansiossamme.

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

Nyt orkestroidaan konttimme.

docker-compose up -d

Kuten olet ehkä jo huomannut, docker-compose upkomento käynnistää vain ne säilöt, joita ei ole vielä aloitettu. Se tarkistaa docker-compose.ymltiedostosi ja käynnissä olevien säilöjen nykyisen kokoonpanon väliset erot .

Tarkista vielä kerran, että MySQL-säilö käynnistettiin.

docker ps

Täytä nyt maailman tietokanta.

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

Voit varmistaa, että tietokanta on täytetty, valitsemalla tiedot suoraan tietokannasta. Avaa ensin säilön sisällä oleva MySQL-kehote.

docker-compose exec mysql mysql -uroot -proot world

Suorita MySQL-kehotteessa seuraava.

select * from city limit 10;

Näet luettelon kaupungeista. Sulje nyt MySQL-kehote.

mysql> exit

Sovelluksemme rakentaminen

Nyt kun kaikki tarvittavat säiliöt ovat käytössä, voimme keskittyä esimerkkisovellukseemme. Päivitä app/index.phptiedosto seuraavaan.

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

Jos käytät [vultr-instance-ip]verkkoselainta, näet luettelon maailman väkirikkaimmista kaupungeista. Onnittelut, olet ottanut käyttöön täysin toimivan PHP-sovelluksen Dockerin avulla.

Johtopäätös

Tässä opetusohjelmassa olen näyttänyt vaihe vaiheelta, kuinka täysin toimiva PHP-sovellus konfiguroidaan. Rakensimme räätälöityjä kuvia PHP:lle ja Nginxille ja määritimme Docker-Composen ohjaamaan säiliöitämme. Huolimatta siitä, että tämä asetus on hyvin yksinkertainen ja yksinkertainen, se kuvastaa tosielämän skenaariota.

Tässä oppaassa olemme rakentaneet ja merkinneet kuvat paikallisesti. Jos haluat joustavamman asennuksen, voit siirtää nämä kuvat telakointiaseman rekisteriin . Voit siirtyä viralliseen Docker-rekisteriin tai jopa määrittää oman telakointiaseman rekisterin. Joka tapauksessa tämän avulla voit rakentaa kuvasi yhdelle isännälle ja käyttää niitä toisessa.

Jos haluat lisätietoja sovelluksen käytöstä docker-compose, katso virallinen dokumentaatio .

Riippuen sovellusvaatimuksistasi ja käyttämästäsi PHP-kehyksestä, saatat haluta lisätä laajennuksia. Tämä voidaan tehdä helposti muokkaamalla Dockerfilekäytettyä mukautetun PHP-kuvamme luomiseen. Jotkut laajennukset tarvitsevat kuitenkin lisäriippuvuuksia, jotta ne voidaan asentaa säilöön. Sinun tulee tutustua PHP:n virallisen dokumentaation laajennusluetteloon tarkistaaksesi kunkin laajennuksen perusvaatimukset.


Näin voit tarkistaa Hyper-V-säiliöt Windows 10 Insiderissä

Näin voit tarkistaa Hyper-V-säiliöt Windows 10 Insiderissä

Microsoft on selittänyt uudessa blogiviestissä, kuinka Windows Insiders voi testata Hyper-V-säilöjä Windows 10:ssä, uudessa virtualisointiratkaisussa, jonka avulla sovellukset voivat toimia vaikuttamatta muuhun käyttöjärjestelmääsi.

Asenna Rancher OS iPXE:n kautta

Asenna Rancher OS iPXE:n kautta

Rancher OS on erittäin kevyt Linux-jakelu, joka on rakennettu Dockerin ympärille. Itse käyttöjärjestelmä painaa noin 20 Mt. Tämän opetusohjelman avulla pääset alkuun

Määritä CoreOS:ssä oma Docker-rekisteri

Määritä CoreOS:ssä oma Docker-rekisteri

Me kaikki tiedämme ja rakastamme Dockeria, alustaa sovellussäilöjen luomiseen, hallintaan ja jakamiseen useille koneille. Docker Inc. tarjoaa palvelun t

Docker-composen asentaminen CoreOS:ään

Docker-composen asentaminen CoreOS:ään

Tässä artikkelissa kerrotaan, kuinka Docker-compose asennetaan CoreOS:ään. CoreOS:ssä /usr/-kansio on muuttumaton, joten tavallinen /usr/local/bin-polku ei ole käytettävissä

Asenna Docker CE Ubuntuun 18.04

Asenna Docker CE Ubuntuun 18.04

Johdanto Docker on sovellus, jonka avulla voimme ottaa käyttöön ohjelmia, joita ajetaan säilöinä. Se on kirjoitettu suositulla Go-ohjelmointikielellä

Luo Docker Swarm Alpine Linux 3.9.0:lle

Luo Docker Swarm Alpine Linux 3.9.0:lle

Johdanto Tämä opas näyttää, kuinka Docker-parvi luodaan ja konfiguroidaan käyttämällä useita Alpine Linux 3.9.0 -palvelimia ja Portaineria. Ole tietoinen siitä

Ota PHP-sovellus käyttöön Docker-compose-sovelluksella

Ota PHP-sovellus käyttöön Docker-compose-sovelluksella

PHP-sovellukset koostuvat yleensä verkkopalvelimesta, relaatiotietokantajärjestelmästä ja itse kielitulkista. Tässä opetusohjelmassa hyödynnämme

Kuormituksen tasapaino Dockerin kanssa

Kuormituksen tasapaino Dockerin kanssa

Kun käytät verkkosovellusta, haluat yleensä saada kaiken irti resursseistasi ilman, että sinun tarvitsee muuttaa ohjelmistoasi käyttämään monisäikeistä o

Ota Node.js-sovellus käyttöön Dockerin avulla

Ota Node.js-sovellus käyttöön Dockerin avulla

Tämä artikkeli näyttää, kuinka Node-sovellus otetaan käyttöön Docker-säilön sisällä. Huomautus: Tämä opetusohjelma olettaa, että olet asentanut Dockerin ja lukenut sen

Docker CE:n asentaminen Debian 9:ään

Docker CE:n asentaminen Debian 9:ään

Käytätkö erilaista järjestelmää? Johdanto Docker on sovellus, joka mahdollistaa ohjelmistojen käyttöönoton virtuaalisäiliöissä. Se oli kirjoitettu G:ssä

Aloita SQL Server 2017:n (MS-SQL) käyttäminen CentOS 7:ssä Dockerin kanssa

Aloita SQL Server 2017:n (MS-SQL) käyttäminen CentOS 7:ssä Dockerin kanssa

Esitiedot Docker engine 1.8+. Vähintään 4 Gt levytilaa. Vähintään 4 Gt RAM-muistia. Vaihe 1. Asenna Docker SQL-palvelimen asentamiseksi Docker mus

Sticky Session with Docker Swarm (CE) Debian 9:ssä

Sticky Session with Docker Swarm (CE) Debian 9:ssä

Käytätkö erilaista järjestelmää? Johdanto Docker Swarm muuttaa yksittäiset palvelimesi tietokoneklusteriksi; helpottaa skaalaus, korkea saatavuus ja

Asenna Rancher Server RancherOS:ään

Asenna Rancher Server RancherOS:ään

Yleiskatsaus RancherOS on uskomattoman kevyt käyttöjärjestelmä (vain noin 60 Mt), joka käyttää Docker-daemonia PID 0 -tunnuksena järjestelmäpalvelujen suorittamiseen.

Asenna Rancher Ubuntuun 16.04

Asenna Rancher Ubuntuun 16.04

Käytätkö erilaista järjestelmää? Johdanto Rancher on avoimen lähdekoodin alusta konttien ajamiseen ja yksityisen konttipalvelun rakentamiseen. Rancher on perusta

Asenna Sentry Dockerin kautta Ubuntuun 16.04

Asenna Sentry Dockerin kautta Ubuntuun 16.04

Käytätkö erilaista järjestelmää? Johdanto Sentry on avoimen lähdekoodin ratkaisu virheiden seurantaan. Sentry seuraa poikkeuksia ja muita hyödyllisiä viestejä

Dockerin käyttö: Ensimmäisen Docker-säilön luominen

Dockerin käyttö: Ensimmäisen Docker-säilön luominen

Tämä opetusohjelma selittää Dockerin käytön aloittamisen perusteet. Oletan, että sinulla on jo Docker asennettuna. Tämän opetusohjelman vaiheet toimivat

Dockerin asentaminen Ubuntuun 14.04

Dockerin asentaminen Ubuntuun 14.04

Käytätkö erilaista järjestelmää? Docker on sovellus, jonka avulla voidaan ottaa käyttöön säilöinä ajettavia ohjelmia. Se kirjoitettiin suositulla Go-ohjelmalla

Ota ja hallitse LXC-säilöjä turvallisesti Ubuntu 14.04:ssä

Ota ja hallitse LXC-säilöjä turvallisesti Ubuntu 14.04:ssä

LXC-säilöt (Linux-säilöt) ovat Linuxin käyttöjärjestelmäominaisuus, jota voidaan käyttää useiden erillisten Linux-järjestelmien ajamiseen yhdellä isännällä. Nämä

Koneiden nousu: tekoälyn todelliset sovellukset

Koneiden nousu: tekoälyn todelliset sovellukset

Tekoäly ei ole tulevaisuudessa, se tässä nykyisyydessä Tässä blogissa Lue kuinka tekoälysovellukset ovat vaikuttaneet eri sektoreihin.

DDOS-hyökkäykset: lyhyt katsaus

DDOS-hyökkäykset: lyhyt katsaus

Oletko myös DDOS-hyökkäysten uhri ja hämmentynyt ehkäisymenetelmistä? Lue tämä artikkeli ratkaistaksesi kysymyksesi.

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Olet ehkä kuullut, että hakkerit ansaitsevat paljon rahaa, mutta oletko koskaan miettinyt, kuinka he ansaitsevat tuollaista rahaa? keskustellaan.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Haluatko nähdä Googlen vallankumouksellisia keksintöjä ja kuinka nämä keksinnöt muuttivat jokaisen ihmisen elämää nykyään? Lue sitten blogia nähdäksesi Googlen keksinnöt.

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Konsepti itseohjautuvista autoista lähteä tielle tekoälyn avulla on ollut haaveena jo jonkin aikaa. Mutta useista lupauksista huolimatta niitä ei näy missään. Lue tämä blogi saadaksesi lisätietoja…

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Kun tiede kehittyy nopeasti ja ottaa haltuunsa suuren osan ponnisteluistamme, myös riskit altistaa itsemme selittämättömälle singulariteetille kasvavat. Lue, mitä singulaarisuus voisi tarkoittaa meille.

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen säilytystavat ovat kehittyneet mahdollisesti Datan syntymästä lähtien. Tämä blogi käsittelee tiedon tallennuksen kehitystä infografian pohjalta.

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Blogista saat tietää Big Data -arkkitehtuurin eri kerroksista ja niiden toiminnoista yksinkertaisimmalla tavalla.

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

Tässä digitaalisessa maailmassa kodin älylaitteista on tullut tärkeä osa elämää. Tässä on muutamia älykkäiden kodin laitteiden hämmästyttäviä etuja, joiden avulla ne tekevät elämästämme elämisen arvoista ja yksinkertaisempaa.

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

Apple julkaisi äskettäin macOS Catalina 10.15.4 -lisäpäivityksen ongelmien korjaamiseksi, mutta näyttää siltä, ​​että päivitys aiheuttaa lisää ongelmia, jotka johtavat mac-koneiden tiilikaamiseen. Lue tämä artikkeli saadaksesi lisätietoja