Alpine PHP Dockerfile

Docker PHP memcache

单曲循环石进的《夜的钢琴曲八》让心慢慢回归平静。
回想一下,自 15 年10 月 26 日开始从事 IT 工作至今已经将近四年,除了人老一点头发少一点,其它的没啥变化。
然而,距之前写 Jacoco 相关的已过去两年,这期间仅写过两篇 iOS 打包持续集成的,就再也没写过
了,看来这几年真的是毫无长进,唉~
近期,在学习 Kubernetes,就把使用过程遇到的问题记录下来,供大家参考

PHP Dockerfile

基于 Alpine 基础镜像构建的 PHP 镜像,期间遇到很多问题,比如,安装 php-memcachephp-redisPHP 依赖的时候,根据 Alpine 的版本不同安装依赖的问题也不同。
以下仅根据 Alpine 最新镜像构建的 PHP 镜像,若需要 Alpine 每个版本所对应的 PHP 版本,请前往 Alpine Linux Packages 中查看,根据自行所需版本调整 Apline 镜像版本

ARG VERSION=latest
FROM alpine:${VERSION}
LABEL author="naisisor "

# 安装基础 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" ]

问题记录

  1. 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 支持(默认时开启的)。
      

你可能感兴趣的:(Alpine PHP Dockerfile)