教你如何做出自己想要的PHP-Docker镜像

6次阅读

共计 1984 个字符,预计需要花费 5 分钟才能阅读完成。

之前有片文章讲过如何通过 Docker 来构建 Laravel 的开发环境,其实变通一下就能够在本地电脑上用 Docker 运行任何 PHP 项目,让任何 PHP 项目都能运行在 Docker 环境中主要是需要根据 PHP 项目的依赖制作 PHP 镜像的 Dockerfile。这篇文章就主要讲一下如何根据需求制作 PHP 的 Docker 镜像文件。

1. 继承基础镜像

首先需要根据你的 PHP 项目对 PHP 的要求找到基础镜像,然后再在基础镜像的基础上按需安装 PHP 的扩展。在 Dockerfile 中使用 FROM 命令指定基础镜像。

From <image>
  • FROM 指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
  • FROM 必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 语句开始。

这里我们打算制作一个 PHP7.2 的包括 FPM 的定制化镜像,所以首先在 Dockerfile 中指定基础镜像:

FROM php:7.2-fpm

2. 安装 PHP 扩展

定制 PHP 镜像的主要工作就是安装各种 PHP 扩展,在 Dockerfile 中 PHP 镜像安装扩展有三种方法,每种方法都有它特定的使用场景,下面依次来说。

2.1 安装 dockerhub 中 php 官方提供的扩展

在 DockerHub 中提供了一些官方的 PHP 扩展,可以通过 docker-php-ext-install 脚本命令在 Dockerfile 中列出要安装的扩展,下面让我们的 PHP 镜像安装上常用的 pdopdo_mysqlmcrypt 这些扩展。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath

如果你需要对扩展指定一些自定义的编译参数的话,docker 提供了另外一个有用的脚本 docker-php-ext-configure 来传递编译参数(一般情况下用不到)。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

2.2 使用 PECL 安装扩展

DockerHub 上只是提供了一部分 PHP 的扩展,安装这些以外的扩展仍然需要 PECL,在 Docker 镜像中使用pecl install 下载、编译、安装扩展然后使用docker-php-ext-enable

下面使用 PECL 安装了 PHPredis还有 grpc 扩展。

RUN pecl install grpc \
     && docker-php-ext-enable grpc \
     && pecl install -o -f redis \
     && docker-php-ext-enable redis \
     && rm -rf /tmp/pear

2.3 源码安装扩展

有些扩展即无法使用 docker-php-ext-install 安装也无法通过 PECL 安装,只能通过源码编译安装(PHP 扩展型的框架 Phalcon 就是这样,不过设置比较复杂,以后再讲), 在 Docker 中同样能够通过源码安装 PHP 扩展

RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p /tmp/xcache \
    && tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && docker-php-ext-configure /tmp/xcache --enable-xcache \
    && docker-php-ext-install /tmp/xcache \
    && rm -r /tmp/xcache

讲在最后

文章重点讲了一下 Docker 中怎么安装 PHP 的扩展,其实还有其他很多与 Docker 相关的概念需要了解才能制作出自己需要的镜像文件,好在 Docker 官方教程里有详细的讲解,感兴趣的一定要按照教程的步骤自己实践一下。

现在服务的业务组织里服务端开发语言主要用 Go,PHP 更多的是一些老系统、管理后台或者活动类系统在用,最近两个月我写过的 PHP 代码数都能数过来,更多的时间还是在写 Go 代码。所以最近写的关于 PHP 类的技术文章也很少,之后有时间了会写如何在 Docker 里安装和配置 Phalcon。

正文完
 0