LNMP Docker环境搭建 -- PHP 开发系列(1)

互联网是一门实践科学,想要学习 PHP 第一要务即搭建 PHP 开发环境,有了开发环境则可边学习边实践,效果比只看视频和教程好很多。博主也是个 PHP 初学者,搭建环境也并不是一番风顺。本文记录了通过 Docker 搭建 LNMP Web 开发环境过程,以帮助初学者快速搭建一个简单易上手的开发环境。

0 前言

LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:

  • Linux
  • Nginx
  • MySQL
  • PHP

搭建环境前需要安装 Docker 相关软件:

  1. Docker for MAC
  2. Kitematic

若不了解 Docker 相关知识,可参考博主前文《利用 GitHub + Hexo + Docker 快速构建独立博客 – MAC篇》

LNMP Docker 环境搭建

LNMP Docke 配置采用 Github 上的开源项目 micooz/docker-lnmp

LNMP Docker 环境整体结构如下图所示:

image

Docker 环境中共有3个 Container,分别安装 Nginx、PHP-FPM、MySQL,通过 docker-compose.yml 文件配置3个 Container 间的连接关系。同时 docker-compose.yml 也配置了 Contain 中映射到宿主机的相关文件路径,即图中所示 Mount 部分。

下面介绍具体的环境搭建过程:

1.download 或 clone github 工程至本地。

2.cmd 控制台切换到 github 工程运行指令

1
$ sudo docker-compose up

3.docker 会自动下载相关 image 并开启服务,一切正常的话通过 Kitematic 可看到 PHP-FPM 和 MySQL Container 服务已经开启,Nginx 服务报错关闭,错误提示与 server.key 及 server.crt 相关。这里遇到的错误是因为 Nginx 启用 443 端口,443端口是默认的 Https 链接端口。由于开启 Https 服务需要本地配置相关证书,此时本地并无相关证书而报错。这里我们忽略 https 相关配置,进入 nginx/conf.d/ 路径,编辑 default.conf 文件,注释以下几行代码

1
2
3
4
5
6
#    listen  443 ssl;
# ssl_certificate /etc/nginx/server.crt;
# ssl_certificate_key /etc/nginx/server.key;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

4.再次执行第2步指令,可见3个 Container 正常开启。

5.接下来我们会给 PHP-FPM 安装 mysqli 插件,PHP-FPM 通过 mysqli 与 MySQL 进行通信。默认的配置是不包含 mysqli 插件的,编辑 php-fpm/ 路径下的 Dockerfile 文件,增加一行代码如下:

1
2
3
4
######
# You can install php extensions using docker-php-ext-install
RUN docker-php-ext-install mysqli
######

修改 Dockerfile 文件后需重新 build,执行以下指令:

1
$ sudo docker-compose build

然后开启服务:

1
$ sudo docker-compose up

1
$ sudo docker-compose up -d

6.最终3个服务同时开启,浏览器中输入:

1
localhost

可打开服务器首页,显示 php 相关信息。

7.关闭服务可输入:

1
$ docker-compose down