LEMP ( Linux, Nginx, MySQL, PHP7 ) Stack Docker-Image-Bereitstellung
Über
Das automatisierte Build-Docker-LEMP-Image linuxconfig/lemp-php7 kann sowohl als Test- als auch als Produktionsumgebung für eine dynamische PHP-Anwendung verwendet werden. Es besteht aus Debian GNU/Linux, dem leichtgewichtigen und dennoch leistungsstarken Nginx-Webserver, dem relationalen Datenbankmanagementsystem MySQL und der Skriptsprache PHP.
Zum Zeitpunkt des Schreibens wird Debian Linux nicht mit PHP 7 als Teil eines Standard-Repositorys ausgeliefert. Aus diesem Grund wurde PHP 7 während des Docker-Image-Builds mit dem Skript compile-php-debian, das sich unter https://github.com/linuxconfig/compile-php-debian befindet, aus dem Quellcode kompiliert.
Darüber hinaus werden derzeit nicht alle PHP-Module von Drittanbietern unter PHP 7 unterstützt.
Einsatz
Im folgenden Abschnitt wird die Bereitstellung von linuxconfig/lemp-php7 docker auf Ihrem Docker-Host beschrieben. Beginnen wir mit der Erstellung einer Beispiel-PHP-Website mit einem MySQL-Verbindungs-Handle. Alternativ können Sie phpinfo(); in den Mix einfügen, um die aktuelle PHP-Informationsseite anzuzeigen:
<?php
$link = mysqli_connect("127.0.0.1", "admin", "pass");
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "Success: A proper connection to MySQL was made!" . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;
mysqli_close($link);
?>
Speichern Sie den obigen Code in index.php Datei und in einem neuen HTML-Verzeichnis. Alternativ kann das html-Verzeichnis Ihre gewünschte PHP-Anwendung enthalten:
mkdir html
vi html/index.php
ls html/
index.php
In dieser Phase sind wir bereit, das Docker-Image linuxconfig/lemp-php7 bereitzustellen:
docker run --name=lemp -dP -v $PWD/html:/var/www/html linuxconfig/lemp-php7
8306ab0e404e5e5ce4f17731f88a610f7f8bc939289c0746b875716355df0b1a
Durch Ausführen des obigen Befehls haben wir einen neuen Docker-Container lemp erstellt und gestartet. Gleichzeitig haben wir auch unser Website-Entwicklungsverzeichnis html als Root-Verzeichnis von nginx gemountet. Sowohl MySQL- als auch Nginx-Ports sind jetzt an den zufälligen Port eines Hostsystems gebunden.
Die beiden lokalen Ports können nun sowohl für den Zugriff auf MySQL- als auch auf Nginx-Dienste verwendet werden:
docker port lemp
3306/tcp -> 0.0.0.0:32772
80/tcp -> 0.0.0.0:32773
Nginx-Zugang
Zu diesem Zeitpunkt können Sie auf den Nginx-Webserver und unsere Website über Ports zugreifen, die mit dem Befehl $sudo docker port lemp angegeben werden. Navigieren Sie über die Befehlszeile oder Ihren Browser zu http://localhost:32773 URL:
curl -i http://localhost:32773
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Sun, 01 Jan 2017 22:51:58 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.1.0
Success: A proper connection to MySQL was made!
Host information: 127.0.0.1 via TCP/IP
MySQL-Zugang
Der Zugriff auf die MySQL-Datenbank erfolgt über den Admin-Benutzer und den Standard-Passwortpass. Wie zuvor müssen wir zuerst die Portnummer des Hostsystems abrufen, die mit der MySQL-Datenbank in einem Docker-Image verknüpft ist, indem wir den Befehl $sudo docker port lemp verwenden. Als nächstes können wir eine Verbindung zur Datenbank herstellen:
mysql -uadmin -ppass -h 127.0.0.1 -P32772
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.5.53-0+deb8u1 (Debian)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
PHP 7
Wie bereits oben erwähnt, wurde PHP 7 aus einem hochmodernen PHP 7-Zweig kompiliert. Die gesamte Installation wurde in das Verzeichnis /usr/local/php-VERSION/ durchgeführt. Aus diesem Grund führen Sie für den Zugriff auf die Befehlszeilen-PHP-Binärdatei entweder mit einem vollständigen Pfad aus:
docker exec -it lemp /usr/local/php-7.1.0/bin/php -v
PHP 7.1.0 (cli) (built: Jan 1 2017 21:33:40) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.1.0, Copyright (c) 1999-2016, by Zend Technologies
oder fügen Sie /usr/local/php-7.1.0/bin/ als Teil Ihrer PATH-Umgebungsvariablen ein.
Zusatzinformation
Abrufen einer Liste der aktivierten PHP 7-Module
docker exec -it lemp /usr/local/php-7.1.0/bin/php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
pspell
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
Container-Zugang
Während Ihr Lemp-Container läuft, können Sie wie folgt darauf zugreifen:
sudo docker exec -it lemp /bin/bash
root@8306ab0e404e:/#
MySQL-Benutzerkennwort zurücksetzen
Der folgende Befehl setzt ein neues Passwort 123für denAdmin-Benutzer:
mysql
mysql> SET PASSWORD FOR 'admin'@'%' = PASSWORD('123');
Starten Sie den lemp-Stack neu
sudo docker exec lemp service supervisor restart