Recherche de site Web

Déploiement d’images Docker de pile LEMP (Linux, Nginx, MySQL, PHP7)


Environ

La compilation automatisée docker LEMP image linuxconfig/lemp-php7 peut être utilisée comme environnement de test et aussi comme environnement de production pour une application PHP dynamique. Il comprend Debian GNU/Linux, un serveur web Nginx léger et pourtant puissant, un système de gestion de base de données relationnelle MySQL et un langage de script PHP.

Au moment de la rédaction de cet article, Debian Linux n’est pas livré avec PHP 7 dans le cadre de son dépôt standard. Pour cette raison, PHP 7 a été compilé à partir du code source lors de la construction de l’image docker en utilisant le script compile-php-debian situé à l’https://github.com/linuxconfig/compile-php-debian.

De plus, tous les modules PHP tiers ne sont pas actuellement pris en charge sur PHP 7.

Déploiement

La section suivante décrit le déploiement de linuxconfig/lemp-php7 docker sur votre hôte docker. Commençons par créer un exemple de site Web PHP avec un handle de connexion MySQL. Vous pouvez également ajouter phpinfo() ; dans le mélange pour afficher la page d’informations PHP actuelle :


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

Enregistrez le code ci-dessus dans index.php fichier et dans un nouveau répertoire html. Alternativement, le répertoire html peut contenir l’application PHP souhaitée :


mkdir html
vi html/index.php
ls html/
index.php

À ce stade, nous sommes prêts à déployer l’image docker linuxconfig/lemp-php7 :


docker run --name=lemp -dP -v $PWD/html:/var/www/html linuxconfig/lemp-php7
8306ab0e404e5e5ce4f17731f88a610f7f8bc939289c0746b875716355df0b1a

En exécutant la commande ci-dessus, nous avons créé et démarré un nouveau conteneur docker lemp. En même temps, nous avons également monté notre répertoire de développement de site web html comme répertoire racine de nginx. Les ports MySQL et Nginx sont désormais liés au port aléatoire d’un système hôte.

Les deux ports locaux peuvent maintenant être utilisés pour accéder à la fois aux services MySQL et Nginx :


docker port lemp
3306/tcp -> 0.0.0.0:32772
80/tcp -> 0.0.0.0:32773

Accès Nginx

À ce stade, le serveur web Nginx et notre site web sont accessibles via les ports donnés par la commande $sudo docker port lemp. Utilisez la ligne de commande ou votre navigateur pour accéder à 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

Accès MySQL

La base de données MySQL est accessible via l’utilisateur admin et le mot de passe par défaut. Comme précédemment, nous devons d’abord obtenir le numéro de port du système hôte lié à la base de données MySQL dans une image docker en utilisant la commande $sudo docker port lemp. Ensuite, nous pouvons nous connecter à la base de données :


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

Comme déjà mentionné ci-dessus, PHP 7 a été compilé à partir d’une branche PHP 7 à la pointe de la technologie. L’ensemble de l’installation a été effectué dans le répertoire /usr/local/php-VERSION/. De cette raison, pour accéder au binaire php en ligne de commande, vous pouvez soit l’exécuter avec un chemin complet :


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

ou incluez /usr/local/php-7.1.0/bin/ dans votre variable d’environnement PATH.

Informations complémentaires

Obtenir une liste des modules PHP 7 activés


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

Accès aux conteneurs

Pendant que votre conteneur lemp est en cours d’exécution, vous pouvez y accéder par :


sudo docker exec -it lemp /bin/bash
root@8306ab0e404e:/#

Réinitialiser le mot de passe de l’utilisateur MySQL

La commande ci-dessous définira un nouveau mot de passe 123pour l’utilisateuradmin :


mysql
mysql> SET PASSWORD FOR 'admin'@'%' = PASSWORD('123');

Redémarrer la pile lemp


sudo docker exec lemp service supervisor restart

Articles connexes: