Поставите ПХП апликацију користећи Доцкер-цомпосе

ПХП апликације се обично састоје од веб сервера, система релационих база података и самог тумача језика. У овом туторијалу користићемо комплетан стек ПХП апликација користећи Доцкер. Ово је детаљан водич у коме ћемо да направимо и оркестрирамо контејнере за Нгинк (веб сервер), МиСКЛ (систем базе података) и ПХП.

Зарад овог туторијала, написаћемо једноставну апликацију која чита листу градова из базе података и приказује је на веб страници, на овај начин ћемо демонстрирати основну, али функционалну ПХП апликацију.

Овај водич претпоставља да имате већ инсталиран Доцкер-ЦЕ и да имате барем минимално радно знање о Доцкер-у. У том случају можете прегледати следеће туторијале:

Конфигурисање нашег радног окружења

Апликација заснована на доцкер-у у стварном животу обично се састоји од неколико контејнера. Ручно управљање њима лако може постати прилично неуредно и гломазно. Ту долази доцкер-цомпосе. Помаже вам да управљате великим бројем контејнера кроз једноставну yamlконфигурациону датотеку.

Инсталирајте доцкер-цомпосе.

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

Направите фасциклу у којој ћете држати све потребне датотеке овог примера, а затим cdу њу. Од сада, ово је наш радни директоријум и свака команда ће се извршавати унутар ове фасцикле и свака путања ће бити референцирана у односу на њу. Ова фасцикла се касније може референцирати као WORKING_DIR.

mkdir ~/docker
cd ~/docker

Сада направите још три фасцикле.

mkdir php nginx app

phpДиректоријум где ћемо градити нашу обичај ПХП слику, nginxфасцикла ће одржати неопходне фајлове за наш обичај нгинк слике и appдиректоријум где ћемо бити стављање изворни код и конфигурацију нашем узорку апликације.

Конфигурисање ПХП контејнера

У овом примеру ћемо се користити php-fpmза повезивање са Нгинк веб сервером. Користићемо званичну ПХП основну слику. Међутим, такође морамо да инсталирамо и омогућимо нека проширења како бисмо могли да приступимо бази података. Унутар phpфасцикле креирајте датотеку под називом Dockerfileи ставите у њу следећи садржај.

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

Имајте на уму да користимо Алпине верзију званичне ПХП слике. Алпине је веома мала дистрибуција усмерена на контејнере пружајући много мање површине. Такође, обратите пажњу на употребу команде docker-php-ext-install, званична ПХП слика обезбеђује ову команду да олакша процес инсталирања и конфигурисања ПХП екстензија.

Сада, хајде да направимо ову Доцкер слику издавањем следећег (унутар нашег WORKING_DIR):

docker build -t vultr-php php/

docker-compose.ymlфајл

Као што је већ поменуто, docker-composeомогућава вам да управљате великим бројем контејнера путем једноставне конфигурационе датотеке. Ова конфигурациона датотека се обично зове docker-compose.yml. Креирајте ову датотеку унутар appфасцикле.

touch app/docker-compose.yml

Сада ставите следећи садржај у ову датотеку.

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

Објаснићемо ову синтаксу. Прво, обратите пажњу на први ред.

version: '2'

Ово одређује верзију коришћене docker-compose.ymlконфигурационе датотеке. Следећи ред специфицира услуге, или другим речима, контејнере који ће бити обезбеђени.

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

Имајте на уму да свака услуга има одређени кључ унутар servicesблока. Овде наведено име ће се касније користити за референцу на овај одређени контејнер. Такође имајте на уму да унутар phpконфигурације дефинишемо слику која се користи за покретање контејнера (ово је слика коју смо претходно направили). Такође дефинишемо мапирање запремине.

volumes:
  - ./:/app

Ово говори docker-composeда се тренутни директоријум ( ./) мапира у /appдиректоријум унутар контејнера. Последњи ред поставља /appфасциклу унутар контејнера као радни директоријум, што значи да је ово фасцикла из које се подразумевано извршавају све будуће команде унутар контејнера.

Сада можемо оркестрирати наше контејнере.

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

Можете да покренете следећу команду да бисте били сигурни да је ПХП контејнер извршен:

docker ps

Како извршити команде унутар контејнера

И даље унутар appфасцикле, уз помоћ docker-composeкоманде можемо покренути било коју команду унутар дефинисаног сервисног контејнера .

docker-compose exec [service] [command]

[service]Чувар места се односи на кључ услуга. У нашем случају, ово је било php. Покренимо команду унутар контејнера да проверимо нашу ПХП верзију.

docker-compose exec php php -v

Видећете следећи излаз.

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

Конфигурисање Нгинк контејнера

Баш као и ПХП контејнер, потребно је да креирамо прилагођену слику за веб сервер. Али у овом случају, само треба да обезбедимо конфигурацију за наш virtual host. Уверите се да сте унутар нашег WORKING_DIRи креирајте Dockerfileунутар nginxфасцикле:

cd ~/docker
touch nginx/Dockerfile

Сада ставите следећи садржај у ово Dockerfile:

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

Користимо подразумевану Нгинк слику засновану на Алпине-у. На овој Доцкер датотеци једноставно копирамо конфигурациону датотеку у подешавање наше апликације. Пре него што направите ову слику, направите конфигурациону датотеку.

touch nginx/default.conf

Сада га попуните овим садржајем.

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

Имајте на уму да у fastcgi_pass php:9000реду позивамо ПХП контејнер по његовом имену унутар serviceблока docker-compose.ymlконфигурационе датотеке. Интерно docker-composeкреира мрежу и додељује име услуге као име хоста свакој од дефинисаних услуга. Сада можемо да направимо Нгинк слику.

docker build -t vultr-nginx nginx/

Ажурирање docker-compose.yml

Сада ажурирајте app/docker-compose.ymlдатотеку.

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

Додали смо само нову услугу. Конфигурација је скоро иста, осим следећег.

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.

Пре него што организујемо нашу нову конфигурацију, хајде да преузмемо пример МиСКЛ базе података. Званична МиСКЛ документација даје неке примере базе података. Користићемо познату светску базу података. Ова база података пружа списак земаља и градова. Да бисте преузели овај пример, извршите следеће у фасцикли наше апликације.

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

Сада хајде да оркестрирамо наше контејнере.

docker-compose up -d

Као што сте можда већ приметили, docker-compose upкоманда покреће само оне контејнере који већ нису покренути. Проверава разлике између ваше docker-compose.ymlдатотеке и тренутне конфигурације покренутих контејнера.

Још једном проверите да ли је МиСКЛ контејнер покренут.

docker ps

Сада попуните светску базу података.

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

Можете да проверите да ли је база података попуњена бирањем података директно из базе података. Прво приступите МиСКЛ промпту унутар контејнера.

docker-compose exec mysql mysql -uroot -proot world

У МиСКЛ одзивнику покрените следеће.

select * from city limit 10;

Видећете листу градова. Сада затворите МиСКЛ промпт.

mysql> exit

Изградња наше апликације

Сада када су сви потребни контејнери покренути и покренути, можемо се фокусирати на нашу апликацију за узорак. Ажурирајте app/index.phpдатотеку на следеће.

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

Ако приступите [vultr-instance-ip]у веб претраживачу, видећете листу најнасељенијих градова на свету. Честитамо, поставили сте потпуно функционалну ПХП апликацију користећи Доцкер.

Закључак

У овом туторијалу, демонстрирао сам корак по корак како да конфигуришете потпуно функционалну ПХП апликацију. Направили смо прилагођене слике за ПХП и Нгинк и конфигурисали доцкер-цомпосе да оркестрирамо наше контејнере. Упркос томе што је веома основна и једноставна, ово подешавање одражава сценарио из стварног живота.

У овом водичу смо направили и означили наше слике локално. За флексибилније подешавање, можете да гурнете ове слике у доцкер регистар . Можете притиснути званични доцкер регистар или чак подесити сопствени доцкер регистар. У сваком случају, ово ће вам омогућити да направите своје слике на једном хосту и користите их на другом.

За детаљнију употребу docker-compose, требало би да погледате званичну документацију .

У зависности од захтева ваше апликације и ПХП оквира који користите, можда ћете желети да додате још екстензија. Ово се лако може урадити модификовањем Dockerfileкоришћеног за прављење наше прилагођене ПХП слике. Међутим, неким екстензијама су потребне додатне зависности да би се инсталирале у контејнер. Требало би да погледате листу екстензија у званичној документацији ПХП-а да бисте прегледали основне захтеве за свако проширење.


Ево како да проверите Хипер-В контејнере на Виндовс 10 Инсидер-у

Ево како да проверите Хипер-В контејнере на Виндовс 10 Инсидер-у

Мицрософт је у новом посту на блогу објаснио како Виндовс Инсајдери могу тестирати Хипер-В контејнере на Виндовс 10, ново решење за виртуелизацију које омогућава покретање апликација без утицаја на остатак вашег оперативног система.

Како инсталирати Харбор на ЦентОС 7

Како инсталирати Харбор на ЦентОС 7

Харбор је сервер регистра предузећа отвореног кода који чува и дистрибуира Доцкер слике. Харбор проширује Доцкер Дистрибутион отвореног кода б

Инсталирајте Ранцхер ОС преко иПКСЕ

Инсталирајте Ранцхер ОС преко иПКСЕ

Ранцхер ОС је веома лагана Линук дистрибуција изграђена око Доцкер-а. Сам ОС тежи око 20МБ. Овај водич ће вас покренути и покренути

На ЦореОС-у, подесите сопствени Доцкер регистар

На ЦореОС-у, подесите сопствени Доцкер регистар

Сви знамо и волимо Доцкер, платформу за креирање, управљање и дистрибуцију контејнера апликација на више машина. Доцкер Инц. пружа услугу т

Инсталирање доцкер-цомпосе на ЦореОС

Инсталирање доцкер-цомпосе на ЦореОС

Овај чланак објашњава како да инсталирате доцкер-цомпосе на ЦореОС. У ЦореОС-у, директоријум /уср/ је непроменљив тако да је стандардна /уср/лоцал/бин путања недоступна за

Инсталирајте Ранцхер на ЦентОС 7

Инсталирајте Ранцхер на ЦентОС 7

Користите другачији систем? Увод Ранцхер је платформа отвореног кода за покретање контејнера и изградњу приватног контејнерског сервиса. Ранчер је база

Инсталирајте Доцкер ЦЕ на Убунту 18.04

Инсталирајте Доцкер ЦЕ на Убунту 18.04

Увод Доцкер је апликација која нам омогућава да применимо програме који се покрећу као контејнери. Написан је у популарном Го програмском језику

Направите Доцкер Сварм на Алпине Линук 3.9.0

Направите Доцкер Сварм на Алпине Линук 3.9.0

Увод Овај водич ће вам показати како да креирате и конфигуришете Доцкер рој користећи више Алпине Линук 3.9.0 сервера и Портаинер-а. Имајте на уму да

Поставите ПХП апликацију користећи Доцкер-цомпосе

Поставите ПХП апликацију користећи Доцкер-цомпосе

ПХП апликације се обично састоје од веб сервера, система релационих база података и самог тумача језика. У овом туторијалу бићемо полуге

Баланс оптерећења са Доцкер-ом

Баланс оптерећења са Доцкер-ом

Када покрећете веб апликацију, обично желите да максимално искористите своје ресурсе без потребе да конвертујете софтвер да користи вишенитно о

Поставите Ноде.јс апликацију користећи Доцкер

Поставите Ноде.јс апликацију користећи Доцкер

Овај чланак ће вам показати како да примените своју Ноде апликацију у Доцкер контејнеру. Напомена: Овај водич претпоставља да имате инсталиран и прочитан Доцкер

Инсталирање Доцкер ЦЕ на ЦентОС 7

Инсталирање Доцкер ЦЕ на ЦентОС 7

Доцкер контејнерска технологија вам омогућава да покрећете апликације у специфичном и изолованом окружењу. Доцкер Цоммунити Едитион (ЦЕ) је ново име за фре

Поставите Кубернетес са Кубеадм-ом на ЦентОС 7

Поставите Кубернетес са Кубеадм-ом на ЦентОС 7

Преглед Овај чланак има за циљ да вам помогне да за кратко време покренете Кубернетес кластер са кубеадм-ом. Овај водич ће применити два сервера, на

Инсталирање Доцкер-а на ЦентОС 7

Инсталирање Доцкер-а на ЦентОС 7

Користите другачији систем? Доцкер је апликација која омогућава примену софтвера унутар виртуелних контејнера. Написано је у Го програму

Инсталирање Доцкер ЦЕ на Дебиан 9

Инсталирање Доцкер ЦЕ на Дебиан 9

Користите другачији систем? Увод Доцкер је апликација која омогућава примену софтвера унутар виртуелних контејнера. Написано је у Г

Започните са СКЛ Сервером 2017 (МС-СКЛ) на ЦентОС 7 помоћу Доцкер-а

Започните са СКЛ Сервером 2017 (МС-СКЛ) на ЦентОС 7 помоћу Доцкер-а

Предуслови Доцкер енгине 1.8+. Најмање 4 ГБ простора на диску. Најмање 4 ГБ РАМ-а. Корак 1. Инсталирајте Доцкер Да бисте инсталирали СКЛ-Сервер, потребно је Доцкер

Стицки Сессион Витх Доцкер Сварм (ЦЕ) на Дебиан-у 9

Стицки Сессион Витх Доцкер Сварм (ЦЕ) на Дебиан-у 9

Користите другачији систем? Увод Доцкер Сварм претвара ваше појединачне сервере у кластер рачунара; олакшавање скалирања, висока доступност ан

Два Доцкер графичка алата за управљање: ДоцкерУИ и Схипиард

Два Доцкер графичка алата за управљање: ДоцкерУИ и Схипиард

Уз помоћ апликације Вултр Доцкер, можете лако да примените Доцкер на инстанци вашег Вултр сервера. У међувремену, можете олакшати задатак управљања Доцкер-ом

Инсталирајте Ранцхер Сервер на РанцхерОС

Инсталирајте Ранцхер Сервер на РанцхерОС

Преглед РанцхерОС је невероватно лаган оперативни систем (само око 60 МБ) који покреће системски Доцкер демон као ПИД 0 за покретање системских услуга

Почетак рада са Кубернетес-ом на ЦентОС-у 7

Почетак рада са Кубернетес-ом на ЦентОС-у 7

Кубернетес је платформа отвореног кода коју је развио Гоогле за управљање контејнерским апликацијама на кластеру сервера. Надовезује се на деценију и

Успон машина: Примене вештачке интелигенције у стварном свету

Успон машина: Примене вештачке интелигенције у стварном свету

Вештачка интелигенција није у будућности, она је овде управо у садашњости. У овом блогу Прочитајте како су апликације вештачке интелигенције утицале на различите секторе.

ДДОС напади: кратак преглед

ДДОС напади: кратак преглед

Да ли сте и ви жртва ДДОС напада и збуњени сте методама превенције? Прочитајте овај чланак да бисте решили своја питања.

Да ли сте се икада запитали како хакери зарађују новац?

Да ли сте се икада запитали како хакери зарађују новац?

Можда сте чули да хакери зарађују много новца, али да ли сте се икада запитали како зарађују толики новац? Хајде да причамо.

Гоогле-ови револуционарни изуми који ће вам олакшати живот.

Гоогле-ови револуционарни изуми који ће вам олакшати живот.

Да ли желите да видите револуционарне изуме Гугла и како су ти изуми променили живот сваког људског бића данас? Затим читајте на блогу да бисте видели Гооглеове изуме.

Фридаи Ессентиал: Шта се десило са аутомобилима које покреће вештачка интелигенција?

Фридаи Ессентиал: Шта се десило са аутомобилима које покреће вештачка интелигенција?

Концепт самовозећих аутомобила који путују на путеве уз помоћ вештачке интелигенције је сан који већ неко време имамо. Али упркос неколико обећања, њих нема нигде. Прочитајте овај блог да сазнате више…

Технолошка сингуларност: далека будућност људске цивилизације?

Технолошка сингуларност: далека будућност људске цивилизације?

Како се наука развија великом брзином, преузимајући многе наше напоре, расте и ризик да се подвргнемо необјашњивој сингуларности. Прочитајте шта би сингуларност могла да значи за нас.

Еволуција складиштења података – Инфографика

Еволуција складиштења података – Инфографика

Методе складиштења података су се развијале можда од рођења података. Овај блог покрива еволуцију складиштења података на основу инфографике.

Функционалности слојева референтне архитектуре великих података

Функционалности слојева референтне архитектуре великих података

Прочитајте блог да бисте на најједноставнији начин упознали различите слојеве у архитектури великих података и њихове функционалности.

6 невероватних предности поседовања паметних кућних уређаја у нашим животима

6 невероватних предности поседовања паметних кућних уређаја у нашим животима

У овом дигиталном свету, паметни кућни уређаји постали су кључни део живота. Ево неколико невероватних предности паметних кућних уређаја о томе како они чине наш живот вредним живљења и једноставнијим.

Ажурирање додатка за мацОС Цаталина 10.15.4 изазива више проблема него што их решава

Ажурирање додатка за мацОС Цаталина 10.15.4 изазива више проблема него што их решава

Недавно је Аппле издао мацОС Цаталина 10.15.4 додатак за исправку проблема, али изгледа да ажурирање изазива више проблема који доводе до квара Мац машина. Прочитајте овај чланак да бисте сазнали више