构建php镜像(docker)

背景

最近着手进行公司内项目的容器化改造,因此需要构建一个php的docker镜像

说实话,php由于本身的原因,在安装扩展方面确实没有其他语言那么顺畅,注定是要采坑的
经历了各种各样的错误信息以后,最终是构建完成了

构建的版本

  • php8.0-fpm
  • alpine

ps: 构建镜像的时候,我们应该尽可能的选择alpine系统,来保证镜像的大小,因为在实际的运行过程中,我们会有成千上万个contiainer在运行,镜像每多100M的容量,在运行过程中的消耗都是不可估量的

这里给出一份Dockerfile

FROM php:8.0-fpm-alpine

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

RUN apk update
RUN apk add --no-cache  freetype-dev \
        libjpeg-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        zlib-dev

RUN apk add gcc g++ make libffi-dev openssl-dev m4 autoconf

RUN docker-php-ext-install pdo_mysql pcntl opcache bcmath \
    && docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

RUN pecl install  grpc \
     && docker-php-ext-enable grpc  
RUN printf "no\nno\nno\n" | pecl install -o -f redis \
    && docker-php-ext-enable redis \
    && rm -rf /tmp/pear

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
        && composer config -g repo.packagist composer https://packagist.phpcomposer.com 

这期间遇到了挺多问题的 稍微列举一下吧

  1. ERROR: `phpize' failed

    原因是没有安装m4 autoconf 使用命令apk add m4 autoconf 解决

  2. configure: error: C compiler cannot create executables

    原因是用的镜像是alpine版的 很多的工具和依赖在原始的系统内并不存在
    使用命令apk add gcc g++ make libffi-dev openssl-dev解决