14.6 PHP

PHP(Hypertext Preprocessor,超文本预处理器)是一种通用的开源脚本语言。语法吸收了C、Java和Perl等语言的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

14.6 PHP - 图1

1.使用官方镜像

第一步,在PHP项目的根目录中新建一个Dockerfile:


  1. FROM php:5.6-cli
  2. COPY . /usr/src/myapp
  3. WORKDIR /usr/src/myapp
  4. CMD [ "php", "./hello.php" ]

新建hello.php文件:


  1. <?php
  2. echo "hello php\n"
  3. ?>

第二步,运行docker build命令构建镜像:


  1. $ docker build -t php-image .

最后,执行以下命令去运行Docker镜像:


  1. $ docker run -it --rm --name php-container php-image
  2. hello php

2.挂载PHP项目

如果读者需要运行简单的,甚至单文件的PHP项目,那么每次都写Dockerfile会很麻烦。这种情况下,可以用以下命令挂载PHP项目:


  1. $ docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w
  2. /usr/src/myapp php:5.6-cli php your-script.php

3.配合Apache使用

通常情况下,PHP项目需要和Apache httpd/Nginx一起运行,这样就需要PHP容器中内含Apache Web Server。读者可以使用带有apache标签的镜像,如php:5.6-apache。

第一步,在读者的PHP项目的根目录中新建一个Dockerfile,并使用Docker Hub官方的基础镜像:


  1. FROM php:5.6-apache
  2. COPY src/ /var/www/html/

其中,src/是当前包含所有PHP代码的目录。

第二步,使用此Dockerfile构建自定义镜像:


  1. $ docker build -t my-php-app .

第三步,创建并运行此镜像:


  1. $ docker run -it --rm --name my-running-app my-php-app

笔者建议添一个自定义的php.ini配置文件,将其拷贝到/usr/local/lib。这样读者可以对PHP项目做更多的定制化,如开启某些PHP插件,或者对PHP解释器进行一些安全/性能相关的配置。添加方法很简单:


  1. FROM php:5.6-apache
  2. COPY config/php.ini /usr/local/lib/
  3. COPY src/ /var/www/html/

14.6 PHP - 图2提示

src/是当前存放PHP代码的文件夹,config/文件夹包含php.ini文件。

如果读者希望直接使用官方镜像运行PHP项目,可以执行如下命令:


  1. $ docker run -it --rm --name my-apache-php-app -v "$(pwd)":/var/www/html php:
  2. 5.6-apache