背景
最近着手进行公司内项目的容器化改造,因此需要构建一个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
这期间遇到了挺多问题的 稍微列举一下吧
-
ERROR: `phpize' failed
原因是没有安装m4 autoconf 使用命令apk add m4 autoconf 解决
-
configure: error: C compiler cannot create executables
原因是用的镜像是alpine版的 很多的工具和依赖在原始的系统内并不存在
使用命令apk add gcc g++ make libffi-dev openssl-dev解决