如果你还不理解docker跟docker镜像制作,请自行google学习。

Dockerfile

给php-fpm镜像安装php扩展可以参考How to install more PHP extensions
由于内地的网络通讯问题,这里提供第二种方式,先下载安装文件,放在Dockerfile的同级目录下,然后再执行安装。
温馨提示:因为新版xdebug已经不支持php5,如果你用的是php5,请选择xdebug-2.5.5。

FROM php:5-fpm
# 安装mysql扩展
RUN docker-php-ext-install mysql

# 安装并启用xdebug
# 方法一,使用pecl直接安装
#RUN pecl install xdebug-2.5.5
#RUN docker-php-ext-enable xdebug
# 方法二,下载文件安装
RUN mkdir /home/software
COPY xdebug-2.5.5.tgz /home/software/
RUN pecl install /home/software/xdebug-2.5.5.tgz
RUN docker-php-ext-enable xdebug

生成镜像

docker build -t php5-fpm-xdebug .

docker-compose.yml

温馨提示:
1、不要把/usr/local/etc/php/conf.d/这个目录映射出来,因为你使用docker-php-ext-install的时候,会往里面写配置文件。你只需要把你自定义的ini文件映射到容器里面就好了。 2、这里没有把php-fpm默认的9000端口映射到host机,因为没有必要,容器间通讯,我们可以使用php-fpm:9000。在下面的nginx站点配置,你会看到我们就是怎么写的。而且9000我们用作了xdebug的remote_port,所以调试的时候,9000就是phpstrom的监听端口。为了避免冲突,我们不把9000端口映射host机。

version: '3' 

services:
  php-fpm:
    image: php5-fpm-xdebug
    volumes:
     - /etc/localtime:/etc/localtime:ro
     - ./html:/usr/share/nginx/html:rw
     - ./php/php.ini:/usr/local/etc/php/php.ini
     - ./php/conf.d/docker-php-ext-xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    container_name: "php-fpm"
  nginx:
    image: nginx:1.15
    ports:
      - "85:85"
    depends_on:
      - "php-fpm"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:rw
      - ./html:/usr/share/nginx/html:rw
    container_name: "nginx"

docker-php-ext-xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_host=192.168.204.129
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

有不少同学不理解xdebug.remote是什么意思,它是xdebug提供的一种远程调试模式,也就是服务器跟你调试的代码不在一个地方。idekey就是一个标志,当你在querystring中加入?XDEBUG_SESSION_START=PHPSTORM,xdebug就会往remote_host:remote_port发送调试信息。一般来说,我们会在phpstorm配置监听,接收来自xdebug的信息,这样就可以实现服务器联调了。我会在这篇章做详细说明。

default.conf

这是nginx的配置文件,放在./nginx/conf.d/下面。
温馨提示:
1、 root /usr/share/nginx/html/pingjia; 跟
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/pingjia$fastcgi_script_name;
要写一样的路径。
2、 docker-compose.yml 文件中两个serice的 /usr/share/nginx/html 都映射到了 ./html。

server {
    listen       85;
    server_name  192.168.204.129:85;

    location / {
        root   /usr/share/nginx/html/pingjia;
        index  index.html index.htm index.php;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/pingjia$fastcgi_script_name;
        include        fastcgi_params;
    }
}

整个compose目录结构

[root@localhost php-nginx-compose]# tree ./ -L 3
./
├── docker-compose.yml
├── html
│   ├── index.html
│   └── phpinfo.php
├── nginx
│   └── conf.d
│       └── default.conf
└── php
    ├── conf.d
    │   └── docker-php-ext-xdebug.ini
    ├── php.ini
    ├── php.ini-development
    └── php.ini-production

打开phpinfo,检查xdebug是否正常安装

phpinfo-xdebug

版权声明:如无特别声明,本文版权归 一年四季 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 制作php-fpm-xdebug docker镜像 》

本文链接:https://www.yucanlin.cn/develop/operation/php-fpm-xdebug-docker.html