alpine 制作 PHP 环境镜像

最近在研究 gateway-worker 的使用,使用的 php 基础镜像是 debian,在安装 event 扩展时遇到 php7 configure: error: Cannot find OpenSSL's <evp.h> 问题搞了好久,安装 openssl,libssl-dev,都没有解决,于是尝试把 php 环境换了,使用 alpine 来搭建 php 环境试一下。

  • 以下是对应 Dockerfile 文件
    from alpine:latest
    label author="xxx@163.com"
    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 libevent \
      && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
      && apk del tzdata
    RUN set -x \
      && apk update \
      && apk add --no-cache php7 \
      php7-ctype php7-curl php7-json php7-fileinfo php7-iconv \
      php7-mbstring php7-openssl php7-pcntl php7-pdo php7-pdo_mysql \
      php7-posix php7-session php7-pecl-event
    CMD ["/bin/bash"]
    其中扩展是按照以前的环境扩展安装的,可以到 pkgs.alpinelinux.org/packages 查找相关扩展,比如查找 event 扩展,搜索 php7*event*
    这里有个问题是安装的是 php7.3版本的,有时我们的 php 版本不能随便变,就要安装其他版本的 php。
  • 安装其他版本的 php
    在 alpine 镜像中
    wget -O /etc/apk/keys/phpearth.rsa.pub https://repos.php.earth/alpine/phpearth.rsa.pub
    echo "https://repos.php.earth/alpine/v3.7" >> /etc/apk/repositories
    apk update 更新索引
    apk search php7.1 搜索相关 php 版本软件信息
    这个方法也只能安装 php7.X 版本的而已,参考 docs.php.earth/docker/alpine/
php
本作品采用《CC 协议》,转载必须注明作者和本文链接
雪花飘
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

在 docker 中 运行event

apt-get install -y –no-install-recommends libevent-dev
pecl install event

#Include libevent OpenSSL support [yes] : 时输入no回车,

#PHP Namespace for all Event classes [no]: 时输入yes

docker-php-ext-enable event

docker 版的 php,将文件 /usr/local/etc/php/conf.d/ 目录下的文件 docker-php-ext-event.ini 重命名为 docker-php-ext-socketsnext-event.ini,让它排在 docker-php-ext-sockets.ini 后面即可

mv /usr/local/etc/php/conf.d/docker-php-ext-event.ini /usr/local/etc/php/conf.d/docker-php-ext-socketsnext-event.ini

php -m
运行正常

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!