Docker
PHP
memcache
单曲循环石进的《夜的钢琴曲八》让心慢慢回归平静。
回想一下,自 15 年10 月 26 日开始从事 IT 工作至今已经将近四年,除了人老一点头发少一点,其它的没啥变化。
然而,距之前写 Jacoco 相关的简书已过去两年,这期间仅写过两篇 iOS 打包持续集成的简书,就再也没写过
了,看来这几年真的是毫无长进,唉~
近期,在学习 Kubernetes,就把使用过程遇到的问题记录下来,供大家参考
PHP Dockerfile
基于
Alpine
基础镜像构建的PHP
镜像,期间遇到很多问题,比如,安装php-memcache
或php-redis
等PHP
依赖的时候,根据Alpine
的版本不同安装依赖的问题也不同。
以下仅根据Alpine
最新镜像构建的PHP
镜像,若需要Alpine
每个版本所对应的PHP
版本,请前往 Alpine Linux Packages 中查看,根据自行所需版本调整Apline
镜像版本
ARG VERSION=latest
FROM alpine:${VERSION}
LABEL author="naisisor <naisi.future@gmail.com>"
# 安装基础 package
RUN set -x \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
&& apk add --no-cache tzdata vim openssl openssh openssl-dev bash curl \
# 变更时区
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& apk del tzdata
# 安装 PHP
RUN set -x \
&& apk update \
&& apk add --no-cache php7 php7-fpm php7-pear php7-dev \
php7-curl php7-json php7-phar php7-iconv php7-openssl php7-dom php7-mbstring \
php7-mysqlnd php7-mysqli php7-pdo_mysql php7-simplexml php7-xmlrpc php7-xmlreader \
php7-xmlwriter php7-opcache php7-zlib php7-zip php7-gd php7-session php7-redis \
php7-memcached php7-tokenizer php7-fileinfo php7-ctype php7-bcmath php7-mcrypt \
php7-bz2 php7-exif php7-gettext php7-ftp php7-pcntl php7-posix php7-shmop php7-sockets \
php7-exif php7-sysvmsg php7-sysvsem php7-sysvshm php7-wddx php7-xsl
# 安装 & 配置 composer
RUN set -x \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin \
&& mv /usr/local/bin/composer.phar /usr/local/bin/composer \
&& composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 安装 php-memcache
ARG MEMCACHE_VERSION=4.0.4
ARG MEMCACHE_DIR=/data/pecl-memcache-${MEMCACHE_VERSION}
ADD https://github.com/websupport-sk/pecl-memcache/archive/${MEMCACHE_VERSION}.tar.gz /data/
RUN set -x \
&& apk update \
# 安装编译需要依赖的库
&& apk add --no-cache gcc make linux-headers libc-dev \
&& cd /data \
&& tar -xf ${MEMCACHE_VERSION}.tar.gz \
&& rm -rf ${MEMCACHE_VERSION}.tar.gz \
&& cd ${MEMCACHE_DIR} \
&& phpize \
&& ./configure --with-php-config=/usr/bin/php-config --disable-memcache-session \
&& make && make install \
&& echo "extension=memcache.so" >> /etc/php7/php.ini \
# 清除缓存、删除无用 package
&& make clean all \
&& apk del gcc make linux-headers libc-dev \
&& rm -rf ${MEMCACHE_DIR}
EXPOSE 80 443
CMD [ "/bin/sh" ]
问题记录
-
php-memcache
安装构建 PHP 镜像的过程中,我所遇到的难点基本上就是在安装 php-memcache 依赖。 搜了大量的资料,发现很多人都遇到了以下问题,但提供的方式能以解决我的问题
- 错误日志:
php_session_register_moudle: symbol not found
。最终在这里看到了 memcache installation php 中的解决办法,在安装时只需加上--disable-memcache-session
就可以解决,如下注释:Note: 可以关闭 memcache session 处理器的支持。使用 pecl install 进行安装时,在静态编译到 php 中时 使用选项 --disable-memcache-session 可以关闭 memcache 的 session 支持(默认时开启的)。
- 错误日志: