LEMP(Linux、Nginx、MySQL、PHP7)堆栈 Docker 镜像部署
关于
自动构建 docker LEMP
映像 linuxconfig/lemp-php7
可用作动态 PHP 应用程序的测试环境和生产环境。它由 Debian GNU/Linux、轻量级但功能强大的 Nginx 网络服务器、MySQL 关系数据库管理系统和 PHP 脚本语言组成。
在撰写本文时,Debian Linux 尚未将 PHP 7 作为其标准存储库的一部分。因此,PHP 7 是在 docker 镜像构建期间使用位于 https://github.com/linuxconfig/compile-php-debian< 的 compile-php-debian
脚本从源代码编译的。 /代码>。
此外,PHP 7 目前并不支持所有第三方 PHP 模块。
部署
以下部分介绍了在 docker 主机上部署 linuxconfig/lemp-php7 docker。让我们首先创建一个带有 MySQL 连接句柄的示例 PHP 网站。或者添加 phpinfo();
到组合中以显示当前 PHP 信息页面:
<?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);
?>
将上述代码保存到 index.php
文件和新的 html
目录中。或者,html
目录可能包含您所需的 PHP 应用程序:
$ mkdir html
$ vi html/index.php
$ ls html/
index.php
在此阶段,我们准备部署 linuxconfig/lemp-php7 docker 镜像:
# docker run --name=lemp -dP -v $PWD/html:/var/www/html linuxconfig/lemp-php7
8306ab0e404e5e5ce4f17731f88a610f7f8bc939289c0746b875716355df0b1a
通过执行上述命令,我们创建并启动了一个新的 docker 容器 lemp
。同时我们也将我们的网站开发目录html
挂载为nginx的根目录。 MySQL 和 Nginx 端口现在都绑定到主机系统的随机端口。
这两个本地端口现在都可以用于访问 MySQL 和 Nginx 服务:
# docker port lemp
3306/tcp -> 0.0.0.0:32772
80/tcp -> 0.0.0.0:32773
Nginx 访问
在此阶段,Nginx Web 服务器和我们的网站可以通过 $sudo docker port Lemp 命令指定的端口进行访问。使用命令行或浏览器导航到 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 访问
MySQL数据库可以通过admin
用户和默认密码pass
访问。与之前一样,首先我们需要使用 $sudo docker port lemp 命令获取 docker 镜像中链接到 MySQL 数据库的主机系统端口号。接下来,我们可以连接数据库:
$ 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
如上所述,PHP 7 是从前沿 PHP 7 分支编译而来的。整个安装在 /usr/local/php-VERSION/
目录中执行。由于这个原因,要访问命令行 php
二进制文件,您可以使用完整路径运行它:
# 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
或者将 /usr/local/php-7.1.0/bin/
作为 PATH
环境变量的一部分。
附加信息
获取已启用的 PHP 7 模块的列表
# 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
集装箱存取
当您的 lemp
容器正在运行时,可以通过以下方式访问它:
$ sudo docker exec -it lemp /bin/bash
root@8306ab0e404e:/#
重置MySQL用户密码
以下命令将为admin
用户设置新密码123
:
# mysql
mysql> SET PASSWORD FOR 'admin'@'%' = PASSWORD('123');
重新启动lemp堆栈
$ sudo docker exec lemp service supervisor restart