A Harbor telepítése CentOS 7 rendszeren
A Harbor egy nyílt forráskódú, vállalati szintű rendszerleíró adatbázis-kiszolgáló, amely Docker-képfájlokat tárol és terjeszt. A Harbor kiterjeszti a nyílt forráskódú Docker Distribution b
A PHP-alkalmazások általában egy webszerverből, egy relációs adatbázis-rendszerből és magából a nyelvi értelmezőből állnak. Ebben az oktatóanyagban egy teljes PHP-alkalmazáskészletet fogunk kihasználni a docker segítségével. Ez egy mélyreható oktatóanyag, amelyben konténereket fogunk építeni és hangszerelni az Nginx (a webszerver), a MySQL (az adatbázisrendszer) és a PHP számára.
Az oktatóanyag kedvéért írunk egy egyszerű alkalmazást, amely beolvassa a városok listáját egy adatbázisból és megjeleníti egy weboldalon, így bemutatunk egy alapvető, de működő PHP alkalmazást.
Ez az útmutató feltételezi, hogy a Docker-CE már telepítve van, és legalább minimális munkaismerettel rendelkezik a dockerrel kapcsolatban. Ezzel kapcsolatban áttekintheti a következő oktatóanyagokat:
Egy valós docker-alapú alkalmazás általában több tárolóból áll. Ezek manuális kezelése könnyen zavarossá és nehézkessé válhat. Itt jön képbe a docker-compose. Segít számos tároló kezelésében egy egyszerű yaml
konfigurációs fájlon keresztül.
Telepítse a docker-compose-t.
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
Hozzon létre egy mappát a példa összes szükséges fájljának tárolására, majd cd
helyezze el. Mostantól ez a mi munkakönyvtárunk, és minden parancs ebben a mappában fog végrehajtásra kerülni, és minden elérési út ehhez képest lesz hivatkozva. Erre a mappára később mint WORKING_DIR
.
mkdir ~/docker
cd ~/docker
Most hozzon létre három további mappát.
mkdir php nginx app
Ebben a php
mappában fogjuk elkészíteni az egyéni PHP-képet, a nginx
mappában tároljuk az egyéni nginx-képünkhöz szükséges fájlokat, és a app
mappába helyezzük el a példaalkalmazásunk forráskódját és konfigurációját.
Ebben a példában php-fpm
az Nginx webszerverhez való csatlakozáshoz használjuk . A hivatalos PHP alapképet fogjuk használni. Azonban néhány bővítményt is telepítenünk és engedélyeznünk kell, hogy hozzáférhessünk az adatbázishoz. A php
mappán belül hozzon létre egy nevű fájlt, Dockerfile
és tegye bele a következő tartalmat.
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
Ne feledje, hogy a hivatalos PHP kép alpesi verzióját használjuk. Az Alpine egy nagyon apró disztribúció, amely a konténereket célozza meg, mivel sokkal kisebb helyet biztosít. Vegye figyelembe a parancs használatát is docker-php-ext-install
, a hivatalos PHP-kép ezt a parancsot biztosítja, hogy megkönnyítse a PHP-bővítmények telepítését és konfigurálását.
Most készítsük el ezt a Docker-képet a következő kiadásával (a mi ben WORKING_DIR
):
docker build -t vultr-php php/
docker-compose.yml
fájlMint már említettük, docker-compose
lehetővé teszi számos tároló kezelését egy egyszerű konfigurációs fájlon keresztül. Ennek a konfigurációs fájlnak általában a neve docker-compose.yml
. Hozd létre ezt a fájlt a app
mappában.
touch app/docker-compose.yml
Most tegye a következő tartalmat ebbe a fájlba.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Elmagyarázzuk ezt a szintaxist. Először is vegye figyelembe az első sort.
version: '2'
Ez adja meg a docker-compose.yml
használt konfigurációs fájl verzióját . A következő sor megadja a szolgáltatásokat, vagy más szóval a kiépítendő tárolókat.
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Vegye figyelembe, hogy minden szolgáltatásnak van egy adott kulcsa a services
blokkon belül . Az itt megadott név a későbbiekben erre a konkrét tárolóra fog hivatkozni. Vegye figyelembe azt is, hogy a php
konfiguráción belül meghatározzuk a tároló futtatásához használt képet (ez az a kép, amelyet korábban készítettünk). Meghatározunk egy térfogat-leképezést is.
volumes:
- ./:/app
Ez azt mondja, docker-compose
hogy az aktuális könyvtárat ( ./
) le kell /app
képezni a tárolón belüli könyvtárra. Az utolsó sor /app
a tárolón belüli mappát állítja be munkakönyvtárnak, ami azt jelenti, hogy ez az a mappa, ahonnan a tárolón belüli összes jövőbeli parancs alapértelmezés szerint végrehajtásra kerül.
Most már hangszerelhetjük konténereinket.
cd ~/docker/app
docker-compose up -d
A következő parancs futtatásával megbizonyosodhat arról, hogy a PHP-tároló végrehajtásra került:
docker ps
Még mindig a app
mappán belül, a parancs segítségével bármilyen parancsot futtathatunk egy meghatározott szolgáltatástárolón belül docker-compose
.
docker-compose exec [service] [command]
A [service]
helyőrző a szervizkulcsra utal. A mi esetünkben ez volt php
. Futtassunk egy parancsot a tárolón belül a PHP verziónk ellenőrzéséhez.
docker-compose exec php php -v
A következő kimenetet fogja látni.
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
Csakúgy, mint a PHP-tárolóhoz, létre kell hoznunk egy egyedi képet a webszerverhez. De ebben az esetben csak egy konfigurációt kell biztosítanunk a virtual host
. Győződjön meg róla, hogy a mi mappánkban van, WORKING_DIR
és hozzon létre egy Dockerfile
belső nginx
mappát:
cd ~/docker
touch nginx/Dockerfile
Most tedd bele a következő tartalmat Dockerfile
:
FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
Az alapértelmezett Nginx képet használjuk az Alpine alapján. Ezen a Docker-fájlon egyszerűen bemásolunk egy konfigurációs fájlt az alkalmazásbeállításunkba. A kép elkészítése előtt hozzon létre egy konfigurációs fájlt.
touch nginx/default.conf
Most töltse fel ezzel a tartalommal.
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;
}
}
Ne feledje, hogy a fastcgi_pass php:9000
sorban a PHP-tárolóra hivatkozunk service
a docker-compose.yml
konfigurációs fájl blokkjában található nevével . Belsőleg docker-compose
létrehoz egy hálózatot, és a szolgáltatásnevet állomásnévként rendeli hozzá minden meghatározott szolgáltatáshoz. Most már elkészíthetjük az Nginx képet.
docker build -t vultr-nginx nginx/
docker-compose.yml
Most frissítse a app/docker-compose.yml
fájlt.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
Csak egy új szolgáltatást adtunk hozzá. A konfiguráció majdnem ugyanaz, kivéve a következőket.
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.
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.
Az új konfigurációnk összehangolása előtt töltsünk le egy MySQL-minta adatbázist. A hivatalos MySQL dokumentáció néhány mintaadatbázist tartalmaz. A jól ismert világadatbázist fogjuk használni. Ez az adatbázis országok és városok listáját tartalmazza. A minta letöltéséhez hajtsa végre a következőt az alkalmazásmappánkban.
curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz
Most hangszereljük konténereinket.
docker-compose up -d
Amint azt már észrevette, a docker-compose up
parancs csak azokat a tárolókat indítja el, amelyek még nincsenek elindítva. Ellenőrzi a különbségeket a docker-compose.yml
fájl és a futó tárolók jelenlegi konfigurációja között.
Még egyszer ellenőrizze, hogy a MySQL-tároló elindult-e.
docker ps
Most töltse fel a világadatbázist.
docker-compose exec -T mysql mysql -uroot -proot world < world.sql
Az adatbázis feltöltését közvetlenül az adatbázisból történő adatok kiválasztásával ellenőrizheti. Először nyissa meg a MySQL promptot a tárolóban.
docker-compose exec mysql mysql -uroot -proot world
A MySQL parancssorban futtassa a következőt.
select * from city limit 10;
Látni fogja a városok listáját. Most lépjen ki a MySQL promptból.
mysql> exit
Most, hogy az összes szükséges konténer elkészült és fut, koncentrálhatunk a példaalkalmazásunkra. Frissítse a
app/index.php
fájlt a következőre.
<?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>
Ha [vultr-instance-ip]
webböngészőben éri el, látni fogja a világ legnépesebb városainak listáját. Gratulálunk, egy teljesen működő PHP-alkalmazást telepített a docker segítségével.
Ebben az oktatóanyagban lépésről lépésre bemutattam egy teljesen működő PHP-alkalmazás konfigurálását. Egyedi képeket készítettünk PHP-hez és Nginx-hez, és konfiguráltuk a docker-compose-t a konténereink hangszereléséhez. Annak ellenére, hogy nagyon egyszerű és egyszerű, ez a beállítás egy valós forgatókönyvet tükröz.
Ebben az útmutatóban képeinket helyben készítettük el és címkéztük fel. A rugalmasabb beállítás érdekében ezeket a képeket átküldheti egy docker-nyilvántartásba . Leküldheti a hivatalos docker-nyilvántartást, vagy akár beállíthatja saját docker-nyilvántartását. Mindenesetre ez lehetővé teszi, hogy a képeket az egyik gazdagépen építse fel, és használja őket egy másikon.
A részletesebb használathoz docker-compose
tekintse meg a hivatalos dokumentációt .
Az alkalmazás követelményeitől és a használt PHP keretrendszertől függően érdemes lehet további bővítményeket hozzáadni. Ez egyszerűen megtehető, ha módosítja a Dockerfile
használt fájlt az egyéni PHP kép elkészítéséhez. Néhány bővítménynek azonban további függőségekre van szüksége a tárolóba való telepítéshez. Tekintse meg a PHP hivatalos dokumentációjában található kiterjesztések listáját,
hogy áttekintse az egyes bővítmények alapvető követelményeit.
A Harbor egy nyílt forráskódú, vállalati szintű rendszerleíró adatbázis-kiszolgáló, amely Docker-képfájlokat tárol és terjeszt. A Harbor kiterjeszti a nyílt forráskódú Docker Distribution b
Mindannyian ismerjük és szeretjük a Dockert, az alkalmazástárolók létrehozására, kezelésére és több gépen való terjesztésére szolgáló platformot. A Docker Inc. szolgáltatást nyújt t
Ez a cikk a docker-compose telepítését ismerteti CoreOS rendszeren. A CoreOS rendszerben az /usr/ mappa megváltoztathatatlan, így a szabványos /usr/local/bin elérési út nem érhető el
Más rendszert használ? Bevezetés A Rancher egy nyílt forráskódú platform konténerek futtatására és privát konténerszolgáltatás kiépítésére. Rancher alap
A PHP-alkalmazások általában egy webszerverből, egy relációs adatbázis-rendszerből és magából a nyelvi értelmezőből állnak. Ebben az oktatóanyagban hasznosak leszünk
Webalkalmazás futtatásakor általában a legtöbbet szeretné kihozni az erőforrásaiból anélkül, hogy a szoftverét többszálú o-ra kell konvertálnia.
Ez a cikk bemutatja, hogyan telepítheti a Node alkalmazást egy Docker-tárolóban. Megjegyzés: Ez az oktatóanyag feltételezi, hogy telepítette és olvasta a Dockert
Áttekintés Ennek a cikknek az a célja, hogy segítsen egy Kubernetes-fürtöt a kubeadm segítségével pillanatok alatt üzembe helyezni. Ez az útmutató két kiszolgáló üzembe helyezését tartalmazza
Más rendszert használ? Bevezetés A Docker egy olyan alkalmazás, amely lehetővé teszi a szoftverek virtuális konténereken belüli telepítését. A G-ben volt írva
Előfeltételek Docker engine 1.8+. Minimum 4 GB lemezterület. Minimum 4 GB RAM. 1. lépés: A Docker telepítése Az SQL-Server telepítéséhez a Docker mus
Más rendszert használ? Bevezetés A Docker Swarm az egyes szervereket számítógépek fürtjévé alakítja; méretezés megkönnyítése, magas rendelkezésre állás an
A mesterséges intelligencia nem a jövőben, hanem itt a jelenben. Ebben a blogban Olvassa el, hogyan hatott a mesterséges intelligencia alkalmazások különböző ágazatokra.
Ön is DDOS támadások áldozata, és tanácstalan a megelőzési módszereket illetően? Olvassa el ezt a cikket a kérdések megoldásához.
Talán hallottál már arról, hogy a hackerek sok pénzt keresnek, de elgondolkodtál már azon, hogyan kereshetnek ennyi pénzt? beszéljük meg.
Szeretné látni a Google forradalmi találmányait, és azt, hogy ezek a találmányok hogyan változtatták meg minden mai ember életét? Ezután olvassa el a blogot, és nézze meg a Google találmányait.
Az önvezető autók koncepciója, hogy mesterséges intelligencia segítségével kerüljenek az utakra, már egy ideje álmunk. De számos ígéret ellenére sehol sem látszanak. Olvassa el ezt a blogot, hogy többet megtudjon…
Ahogy a tudomány gyors ütemben fejlődik, átveszi erőfeszítéseink nagy részét, megnő annak a kockázata is, hogy alávetjük magunkat egy megmagyarázhatatlan szingularitásnak. Olvassa el, mit jelenthet számunkra a szingularitás.
Az adatok tárolási módjai az Adatok születése óta alakulhatnak. Ez a blog egy infografika alapján mutatja be az adattárolás fejlődését.
Olvassa el a blogot, hogy a legegyszerűbb módon ismerje meg a Big Data Architecture különböző rétegeit és azok funkcióit.
Ebben a digitálisan vezérelt világban az intelligens otthoni eszközök az élet döntő részévé váltak. Íme az intelligens otthoni eszközök néhány elképesztő előnye, hogyan teszik életünket érdemessé és egyszerűbbé.
Az Apple a közelmúltban kiadott egy kiegészítést a macOS Catalina 10.15.4-hez a problémák megoldására, de úgy tűnik, hogy a frissítés több problémát okoz, ami a Mac gépek blokkolásához vezet. További információért olvassa el ezt a cikket