About
The automated build docker LEMP
image linuxconfig/lemp-php7
can be used as a testing and also as a production environment for a dynamic PHP applications. It comprises of Debian GNU/Linux, lightweight and yet powerful Nginx webserver, MySQL relational database management system and PHP scripting language.
At the time of writing, Debian Linux does not come with PHP 7 as a part of a its standard repository. From this reason PHP 7 was compiled from the source code during docker image build using compile-php-debian
script located at https://github.com/linuxconfig/compile-php-debian
.
Furthermore, not all 3rd-party PHP modules are currently supported on PHP 7.
Deployment
The following section describes the deployment of linuxconfig/lemp-php7
docker on your docker host. Let’ start by creating a sample PHP website with a MySQL connection handle. Alternatively add phpinfo();
into the mix to display current PHP information page:
<?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);
?>
Save the above code into index.php
file and within a new html
directory. Alternatively,html
directory may contain your desired PHP application:
$ mkdir html $ vi html/index.php $ ls html/ index.php
At this stage we are ready to deploy linuxconfig/lemp-php7
docker image:
# docker run --name=lemp -dP -v $PWD/html:/var/www/html linuxconfig/lemp-php7 8306ab0e404e5e5ce4f17731f88a610f7f8bc939289c0746b875716355df0b1a
By executing the above command we have created and started a new docker container lemp
. At the same time we have also mounted our website development directory html
as nginx’s root directory. Both, MySQL and Nginx ports are now bound to a host system’s random port.
The both local ports can now be used to access both MySQL and Nginx services :
# docker port lemp 3306/tcp -> 0.0.0.0:32772 80/tcp -> 0.0.0.0:32773
Nginx Access
At this stage Nginx webserver and our website can be accessed via ports given by $ sudo docker port lemp
command. Use command line or your browser to navigate to 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 Access
The MySQL database can be accessed via admin
user and default password pass
. As previously, first we need to obtain the host system port number linked to MySQL database within a docker image by using $ sudo docker port lemp
command. Next, we can connect to database:
$ 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
As already mentioned above, PHP 7 was compiled from a bleeding edge PHP 7 branch. The entire installation was performed into /usr/local/php-VERSION/
directory. From this reason to access the command line php
binary you either run it with a full path:
# 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
or include /usr/local/php-7.1.0/bin/
as part of your PATH
environmental variable.
Additional Information
Obtain a list of enabled PHP 7 modules
# 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 Access
While your lemp
container is running it can be access by:
$ sudo docker exec -it lemp /bin/bash root@8306ab0e404e:/#
Reset MySQL user password
The below command will set a new password 123
for theadmin
user :
# mysql mysql> SET PASSWORD FOR 'admin'@'%' = PASSWORD('123');
Restart lemp stack
$ sudo docker exec lemp service supervisor restart