利用docker容器搭建php开发环境

如果用docker 搭建php开发环境一定是非常棒的一件事情。让服务器迁移更加方便

最近一直在研究docker。爬过好多坑。现在再看docker 感觉比一开始了解了一些docker了。于是尝试用docker容器去搭建一套开发环境。这套开发环境我打算分3篇文章去写完成一台服务器模拟多台服务器的工作原理。

第一篇 —— 利用docker容器搭建php开发环境

第二篇 —— 如何利用docker 做负载均衡、和集群。

第三篇 —— 搭建 mysql 的主从 以及数据库配置。

搭建php开发环境

搭建php的开发环境一般用到的是LAMP 也就是 Linux + Apache + Mysql + Php 的开发环境。 虽然 Apache 解析 php 的能力还是比较强的,但是每一个用户请求都会占用一个进程。这样一来 Apache 非常吃内存开销。导致apach的并发连接数并不是很高。所以我并不使用 Apache 来构建php的开发环境 。我所要搭建的php开发环境是 Lnmp 架构的 php 开发环境。也就是 Linux + Nginx + Mysql + Php。 其中的不同是采用比较先进的 Nginx 作为反向代理服务器。 通过php 的 fastcgi 方式去和php主程序去交互。这样的好处是可以支持更多的并发连接数量。具体想知道nginx 的运行原理的话自己百度吧。百度一大堆我就不多描述了。

如果你还没有安装好docker 请先在服务器上把docker安装上。

1.下载 php 官方镜像以及制定的标签 (听说鸟哥发布了php7 😄 就用了)

docker pull php:7-fpm

2.用php镜像创建一个交互式容器并进入该容器

docker run -it --name myphp7 php:7-fpm

3.为php打入想要加入的扩展 (以 iconv mcrypt gd 扩展为例子)

1
2
3
4
5
6
7
8
9
10

apt-get update

apt-get install libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev

docker-php-ext-install iconv mcrypt

docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

docker-php-ext-install gd

4.退出该容器

exit

5.将该容器制作成镜像(当然也可以使用dockerFile的方式去构建镜像。这个以后说吧。自己还没搞懂了。😂)

docker commit -a "xyz" -m "install more PHP extensions" xyzphp/php7-fpm myphp7

6.以守护进程方式运行 xyzphp/php7-fpm 的镜像容器

docker run -it -p 9000 -v /data:/data --name php7-fpm xyzphp/php7-fpm php-fpm

7.在宿主机上安装 nginx

apt-get install nginx

8.查看容器映射端口号

docker ps -a

CONTAINER ID    IMAGE            COMMAND     CREATED          STATUS           PORTS               NAMES
d9d679b8a86a    xyzphp/php7-fpm  "php-fpm"   17 hours ago     Up 10 seconds    0.0.0.0:32777->9000/tcp php-fpm

9.编辑配置nginx配置文件 通过(127.0.0.1:32777) 的fastcgi去解析php文件

vim /etc/nginx/conf.d/test.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;

root /data/php7;
index index.html index.htm index.php;

server_name wiki.xyzphp.com;

location / {
try_files $uri $uri/ =404;
#try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.0:32777;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}
}

10.到/data/php7 目录下编写php文件

echo "<?php phpinfo();?>" > index.php

11.浏览器访问 http://wiki.xyzphp.com

哈哈 docker 运行的php7环境已搭建完成。好开心啊 可以玩php7 如果不想玩直接把这个容器删掉。应为你已经生成好一个docker镜像了。所以你可以生成多个容器。一行命令瞬间创建。感觉真的很爽 😄👻