问下大家如何用docker安装php7.4,主要是问下大家如何安装那么多插件?

问下大家如何安装php7.4
FROM php:7.4-fpm
ENV TZ=Asia/Shanghai
我搜了几个dockerfile,但是都是有报错的,问下大家有没有能用的安装php7.4的dockerfile,然后里面包含插件的?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 18
sanders

把报错发出来看看

8个月前 评论

装插件用这个就可以了 github.com/mlocati/docker-php-exte...

示例
Dockerfile

FROM php:7.4.33-fpm-alpine

ARG PHP_EXTENSIONS

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && install-php-extensions $(echo "$PHP_EXTENSIONS" | sed 's/,/ /g')

构建镜像

docker build -t my-php74 --build-args PHP_EXTENSIONS=pdo_mysql,redis .

运行

docker run my-php74
8个月前 评论
叶小萌 8个月前
donggan (楼主) 8个月前
zhangrongwang (作者) 8个月前

github.com/docker-library/php/tree...

这个是 php dockerfile 的源码,里面有脚本可以直接使用

# 好久不用了, 可以进去后看看
docker-php-ext-install xxx
docker-php-ext-enable xxx 

既然有这个了,也不需要每次都安装

使用docker-compose 或自己封装一个dockerfile 都行,在里面直接用 docker-php-ext-install 安装好需要的插件

8个月前 评论

FROM php:7.4-fpm

安装 Nginx

RUN apt-get update --fix-missing && apt-get install -y nginx librabbitmq-dev
&& apt-get clean && rm -rf /var/lib/apt/lists/*

拷贝 Nginx 配置文件

COPY default /etc/nginx/sites-enabled/default

COPY ./ /var/www/html/

RUN chown -R www-data:www-data /var/www/html/storage RUN chown -R www-data:www-data /var/www/html/bootstrap/cache

安装 Redis 和 Mongo 扩展

RUN pecl install redis
&& docker-php-ext-enable redis
&& pecl install mongodb
&& docker-php-ext-enable mongodb
&& pecl install amqp
&& docker-php-ext-enable amqp
&& docker-php-ext-install mysqli pdo pdo_mysql

EXPOSE 80

启动容器时运行Nginx 进程

CMD service nginx start && php-fpm

8个月前 评论
donggan (楼主) 8个月前

phpdockerio/php:7.4-fpm

8个月前 评论

其实挺简单的... 我是这样处理的 dockerfile 无非就是 将 处理 环境的命令 一股脑的写进 文件里罢了 我们一步一步来看一下

# 使用官方的 镜像 来作为基础 我这边使用的 是 Debian系的 linux 容器 并且包含 fpm , 你到时候可以在官方的 仓库里进行选择 
FROM php:7.4-fpm-buster
# 搞点标签 也可以不写哈哈哈 主要是 写点 作者之类的
LABEL Version="7.4-fpm-buster-dev"

# debian系是用 apt apt-get 作为包管理工具的 所以 第一时间 先 更新一下 apt 仓库 , 听说 要把一套命令写在一个 run 下面 可以减少分层 活用 && \ 这些 符号
RUN cd ~ &&  \
    apt update && \
    # 其实php 官方的镜像 也是 带了一些 基础的 插件的 有一些没有安装 可以 使用 docker-php-ext-install 这个命令 安装 它能够 将 二进制 扩展 安装 并且 启动, 官方扩展 可以去 这个镜像的 /usr/src/php/ext/ 这个目录下 查看 我这边 看到 pdo_mysql 这个 扩展存在 这个目录下 但是没有安装 所以直接 使用 docker-php-ext-install 这个命令 安装 启动 即可
    docker-php-ext-install pdo_mysql && \ 
    # 这边讲一个 安装 容器没有自带的 扩展的安装方式 安装 event 扩展 作为一个例子 
    # 1. 你需要去查询 event 需要的系统 lib 库 然后 使用 系统包管理工具 安装
    apt install -y libevent-dev  && \
    apt install -y libssl-dev && \
    # 2. 去 pecl 网站 查看这个 扩展 支持 你这个 php版本 的 扩展 版本 并且 使用容器命令 直接下载下来 我这边 下载了 event-3.0.8版本 并且  结合 之前 第一个命令 cd ~, 下载文件到 用户目录下 并且名字叫 event-3.0.8.tgz
    curl 'https:pecl.php.net/get/event-3.0.8.tgz' -o event-3.0.8.tgz && \
    # 3. 解压 压缩包 并且 将 内容 移动到 php容器提供的 扩展目录下
    tar zxvf event-3.0.8.tgz && \
    mkdir -p /usr/src/php/ext/event/ && \
    cp -r event-3.0.8/* /usr/src/php/ext/event/ && \
    # 4. 使用 docker-php-ext-install 命令 去 安装 扩展 并且启动
    docker-php-ext-install event && \
    rm -f /usr/local/etc/php/conf.d/docker-php-ext-event.ini && \
    echo 'extension=event.so' >> /usr/local/etc/php/conf.d/docker-php-ext-sockets.ini && \
    # 5. 这边 顺便帮你解决一个 问题 event 插件 启动 一定要再 sockets 插件 后面
    # 这里 顺便 再送 你一个礼物 再搞一个 composer 环境
    php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    php -r "unlink('composer-setup.php');" && \
    mv composer.phar /usr/local/bin/composer

    # 扩展的话 就这些 东西了 无非就是 安装 系统 缺失的 lib 扩展, pecl 找 合适版本 压缩包 下载  解压 放置 扩展目录下 然后 用 docker-php-ext-install 命令 去安装即可
8个月前 评论

Dockerfile:

FROM php:7.4-fpm

# Install env

ADD sources.list /etc/apt/sources.list

RUN apt-get update && apt-get install -y \
    git \
#    cron \
    lsof \
    vim

# 安装依赖包
RUN apt-get update && apt-get install -y --allow-downgrades  \
     zlib1g=1:1.2.11.dfsg-1+deb10u2  \
     libonig5=6.9.1-1 \
     libxml2=2.9.4+dfsg1-7+deb10u4 \
     libzip-dev \
     libfreetype6-dev \
     libjpeg62-turbo-dev \
     libpng-dev

RUN apt-get update && apt-get install -y \
    zlib1g-dev \
    libxml2-dev \
    libonig-dev \
    p7zip-full \
    telnet \
    net-tools \
    vim

# php-ext
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
        && docker-php-ext-install gd \
        && docker-php-ext-install zip \
        && docker-php-ext-install mbstring \
        && docker-php-ext-install tokenizer \
        && docker-php-ext-install bcmath \
#        && docker-php-ext-install mcrypt \
        && docker-php-ext-install mysqli \
        && docker-php-ext-install pdo_mysql \
        && docker-php-ext-install soap


##安装redis扩展
RUN pecl install -o -f redis  &&  rm -rf /tmp/pear  &&  docker-php-ext-enable redis

## kafka 扩展
#RUN apt-get install -y librdkafka-dev
#RUN  pecl channel-update pecl.php.net &&  pecl install rdkafka-3.0.5 && docker-php-ext-enable rdkafka
#

#安装swoole扩展
# RUN pecl install -o -f swoole \
# &&  rm -rf /tmp/pear \
# &&  docker-php-ext-enable swoole

# 源码安装swoole
#RUN git clone https://github.com/swoole/swoole-src \
#&&     cd swoole-src  \
#&&     phpize \
#&&     ./configure \
#&&     make -j 4 \
#&&     make install \
#&&  docker-php-ext-enable swoole

# 源码安装swoole_async
#RUN git clone https://github.com/swoole/ext-async \
#&&     cd ext-async  \
#&&     phpize \
#&&     ./configure \
#&&     make -j 4 \
#&&     make install \
#&&  docker-php-ext-enable swoole_async

#允许ssh连接配置
#RUN apt-get install -y initscripts net-tools openssh-server
ADD sshd_config.bak /etc/ssh/sshd_config
#RUN echo "root:root" | chpasswd
#RUN /etc/init.d/ssh start

# Composer
ADD composer.phar /usr/local/bin/composer
RUN chmod 755 /usr/local/bin/composer

# clean apt cache
RUN  rm -r /var/lib/apt/lists/*

# PHP config
ADD php.ini /usr/local/etc/php/php.ini
ADD php-fpm.conf /usr/local/etc/php-fpm.conf
ADD cacert.pem /usr/local/etc/php/cacert.pem

# COPY xdebug.tgz /home/xdebug.tgz
# php-fpm:8000 xdebug:9000

# Cron
RUN apt-get update && apt-get install  -y -f cron ;exit 0
COPY crontabfile /root/crontabfile
RUN /etc/init.d/cron start

# Write Permission
WORKDIR /web
RUN usermod -u 1000 www-data
RUN chown -R www-data.www-data /web

EXPOSE 9000
# ssh
EXPOSE 22


VOLUME ["/web"]

ENTRYPOINT ["sh","/docker-config/entrypoint.sh"]

sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

entrypoint.sh

#!/bin/bash
php -v && /etc/init.d/cron start && echo `whoami` && /etc/init.d/cron status && tail -f /dev/null
8个月前 评论
snakelis (作者) 8个月前
FROM php:7.4-fpm
# 2.9.0 的安装不能识别命名空间
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && rm -Rf /var/lib/apt/lists/* &&  cat /etc/apt/sources.list
COPY ./redis-5.3.3.tgz /tmp/
#COPY ./xdebug-2.8.1.tgz /tmp/
RUN apt-get update && apt-get install -y libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pgsql \
    && docker-php-ext-install pdo_pgsql \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install bcmath \
#    && pecl install /tmp/xdebug-2.8.1.tgz \
    && pecl install /tmp/redis-5.3.3.tgz \
#    && docker-php-ext-enable xdebug redis zip \
    && docker-php-ext-enable redis zip \
    && curl -o composer https://mirrors.aliyun.com/composer/composer.phar \
    && mv composer /usr/bin/composer \
    && chmod a+x /usr/bin/composer \
    && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
COPY ./xdebug.ini $PHP_INI_DIR/conf.d/
RUN rm /tmp/redis-5.3.3.tgz
#RUN rm /tmp/xdebug-2.8.1.tgz
WORKDIR /usr/share/nginx/html
RUN cp "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
8个月前 评论

github.com/isKarlHsu/docker-php-en...
我自己本地在用的,因为项目多所以起了3个不同的php版本的容器,7.4、8.0和8.1

8个月前 评论

laradock 按需开启扩展

7个月前 评论

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