基于Docker官方php:7.1.33-fpm镜像构建支持67个常见模组的php7.1.33镜像

这篇具有很好参考价值的文章主要介绍了基于Docker官方php:7.1.33-fpm镜像构建支持67个常见模组的php7.1.33镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实践说明:基于RHEL7(CentOS7.9)部署docker环境(23.0.1、24.0.2),所构建的php7.1.33镜像应用于RHEL7-9(如AlmaLinux9.1),但因为docker的特性,适用场景是不限于此的。
文档形成时期:2017-2023年
因系统或软件版本不同,构建部署可能略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。
因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。

PHP7.1模组选择说明

php-7.1.33发布时间是2019.10.24,各模组安装可以参考这个时间。

官方php:7.1.33-fpm镜像的临时容器

通过临时容器获得默认配置和模组信息(可选):
创建临时容器的目的主要是获得默认配置、模组等信息。
docker run -itd --name phpfpm-7.1.33-tmp php:7.1.33-fpm

进入容器查看默认配置
docker exec -it phpfpm-7.1.33-tmp /bin/bash

临时容器默认源

# deb http://snapshot.debian.org/archive/debian/20191118T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20191118T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20191118T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main

可准备国内源,建议用http而不是https
/etc/apt/sources.list阿里云源准备,放构建当前目录

deb https://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ buster main non-free contrib
deb https://mirrors.aliyun.com/debian-security buster/updates main
deb-src https://mirrors.aliyun.com/debian-security buster/updates main
deb https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
#deb https://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
#deb-src https://mirrors.aliyun.com/debian/ buster-backports main non-free contrib

临时容器默认模组

Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

创建自定义网络

创建自定义网络,并指定网段、网关,只有定义了网段,才可以使用此网络为容器分配固定IP
docker network create -d bridge --subnet 10.1.5.0/24 --gateway 10.1.5.1 custom_bridge_net

php7.1.33_Dockerfile

基于官方php:7.1.33-fpm镜像默认模组、wordpress对php环境的要求,php7.1.33部署常见模组,以及曾经的生产环境常用模组,最终整理了比较完整模组安装的Dockerfile文件。
/root/sh/Dockerfiles/Independent/php7.1.33_Dockerfile 的内容:

FROM    php:7.1.33-fpm
MAINTAINER      Fisher "Y"

# 经过反复偿试,发现php7.1.33中采用install-php-extensions几乎都是失败的,官方的docker-php-ext-install成功率较高,所以暂仍采用docker-php-ext-install和pecl方式。


#Download PHP extensions
#ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
#RUN chmod uga+x /usr/local/bin/install-php-extensions && sync
#COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
ADD sources_debian10.list /etc/apt/sources.list

# 设置时区
ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
    && mkdir /opt/web && mkdir -p /usr/local/php71/var/log && touch /usr/local/php71/var/log/php-fpm.log && touch /usr/local/php71/var/log/php_errors.log \
    && groupadd www -g 1000 && useradd -s /sbin/nologin -M www -u 1000 -g 1000 && mkdir /home/www && chown www:www /home/www \
    && chown www:www /usr/local/php71/var/log/php-fpm.log /usr/local/php71/var/log/php_errors.log \
    && DEBIAN_FRONTEND=noninteractive apt-get update -q \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y \
       curl \
       git \
       zip unzip \
    && pecl install swoole-4.4.8 && docker-php-ext-enable swoole \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y libmagickwand-dev && pecl install imagick-stable && docker-php-ext-enable imagick \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libmemcached-dev zlib1g-dev && pecl install memcached-3.1.3 && docker-php-ext-enable memcached \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y libicu-dev && docker-php-ext-install -j$(nproc) intl && docker-php-ext-enable intl \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y libpq-dev && docker-php-ext-install -j$(nproc) pgsql pdo_pgsql && docker-php-ext-enable pgsql pdo_pgsql \
    && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y libssl-dev && docker-php-ext-install -j$(nproc) ftp && docker-php-ext-enable ftp \
    && docker-php-ext-install -j$(nproc) bcmath gettext mysqli pdo pcntl pdo_mysql shmop sockets sysvsem sysvshm calendar exif \
    && docker-php-ext-enable bcmath gettext mysqli pdo pcntl pdo_mysql shmop sockets sysvsem sysvshm calendar exif \
    && apt-get install -y --no-install-recommends libbz2-dev && docker-php-ext-install -j$(nproc) bz2 && docker-php-ext-enable bz2 \
    && apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv && docker-php-ext-enable iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd && docker-php-ext-enable gd \
    && apt-get install -y --no-install-recommends libgmp-dev \
    && docker-php-ext-install -j$(nproc) gmp && docker-php-ext-enable gmp \
    && apt-get install -y --no-install-recommends libldap2-dev \
    && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) ldap && docker-php-ext-enable ldap \
    && apt-get install -y --no-install-recommends libmcrypt-dev && pecl install mcrypt-1.0.0 && docker-php-ext-enable mcrypt \
    && pecl install redis-5.1.1 && docker-php-ext-enable redis \
    && pecl install xdebug-2.8.1 && docker-php-ext-enable xdebug \
    && apt-get install -y librabbitmq-dev libssl-dev && pecl install amqp && docker-php-ext-enable amqp \
    && apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev && docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl && docker-php-ext-enable soap wddx xmlrpc tidy xsl \
    && apt-get install -y --no-install-recommends libzip-dev && docker-php-ext-install -j$(nproc) zip && docker-php-ext-enable zip \
    && pecl install mongodb-1.11.1 && docker-php-ext-enable mongodb \
    && docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache \
    && apt-get install -y --no-install-recommends unixodbc-dev && pecl install sqlsrv-5.6.1 && docker-php-ext-enable sqlsrv && pecl install pdo_sqlsrv-5.6.1 && docker-php-ext-enable pdo_sqlsrv \
    && rm -rf /var/lib/apt/lists/* > /dev/null 2>&1

# 安装 Composer
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

# 部分模组未成功的,如下,或改用安装方式,或弃用:
# geoip odbc
# apt-get install -y --no-install-recommends libgeoip-dev && pecl install geoip && docker-php-ext-enable geoip  报错:geoip.c: In function 'zm_startup_geoip'

模组安装经验

  • php7.1.33中安装mongodb-1.11.1这个老版本可以成功,新版本(mongodb-stable,即mongodb-1.16.1)未能成功,pecl+docker-php-ext-enable能成功,install-php-extensions方式未安装成功,虽然都提示安装成功了(install ok: channel://pecl.php.net/mongodb-1.11.1),但docker构建过程提示有错误而退出。后来在php7.4.33中安装mongodb-stable,通过install-php-extensions方式安装成功。
  • imagick-3.4.4和imagick-stable(imagick-3.7.0)通过install-php-extensions方式安装没能成功,改用“apt-get install + pecl install + docker-php-ext-enable”的方式均能安装成功。后来在php7.4.33中安装imagick-stable(imagick-3.7.0)
  • php7.1.33中中安装geoip未能成功,https://pecl.php.net/package/geoip 中显示该模组最后更新于2016年,估计不常用了,弃之。
  • php7.1.33中采用install-php-extensions安装@composer没有成功。改用curl方式。
  • 经过反复偿试,发现php7.1.33中采用install-php-extensions几乎都是失败的,官方的docker-php-ext-install成功率较高,所以仍采用docker-php-ext-install和pecl方式。
  • memcached-2.2.0没有 PHP 版本限制 ( https://pecl.php.net/package/memcached/2.2.0 ),但memcached-3.1.4需要 PHP 7.0.0 或更新版本
  • swoole可参考:https://www.jianshu.com/p/d1a438413255

php模组部署说明

参考:php模组部署说明

构建镜像

docker buildx build -t tmtcha/php:7.1.33-fpm-v1.01 -f /root/sh/Dockerfiles/Independent/php7.1.33_Dockerfile .

错误处理经验

遇错:rm: cannot remove '/var/lib/apt/lists/': No such file or directory
参考:https://github.com/iMacken/DevDock/issues/8
只有在apt出问题时才会使用这个方法,如果想要一个干净的环境 rm -rf /var/lib/apt/lists/ 这个方式可能解决这个问题。
可以输出到空:rm -rf /var/lib/apt/lists/
> /dev/null 2>&1

运行容器

容器运行失败,可查看日志
docker logs 容器ID或名称

以构建的镜像运行一个临时的容器,为查看和拷贝配置等文件。
删除之前的临时容器:docker stop phpfpm-7.1.33-tmp; docker rm phpfpm-7.1.33-tmp
docker run -itd --name phpfpm-7.1.33-tmp tmtcha/php:7.1.33-fpm-v1.01

可以看到,默认加载配置是这样的:

root@a2e6b489a34e:/var/www/html# php --ini 
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-amqp.ini,
/usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini,
/usr/local/etc/php/conf.d/docker-php-ext-bz2.ini,
/usr/local/etc/php/conf.d/docker-php-ext-calendar.ini,
/usr/local/etc/php/conf.d/docker-php-ext-exif.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gettext.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gmp.ini,
/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-ldap.ini,
/usr/local/etc/php/conf.d/docker-php-ext-mcrypt.ini,
/usr/local/etc/php/conf.d/docker-php-ext-memcached.ini,
/usr/local/etc/php/conf.d/docker-php-ext-mongodb.ini,
/usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_sqlsrv.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pgsql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-shmop.ini,
/usr/local/etc/php/conf.d/docker-php-ext-soap.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sockets.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sqlsrv.ini,
/usr/local/etc/php/conf.d/docker-php-ext-swoole.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sysvsem.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sysvshm.ini,
/usr/local/etc/php/conf.d/docker-php-ext-tidy.ini,
/usr/local/etc/php/conf.d/docker-php-ext-wddx.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xmlrpc.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xsl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini

配置均在/usr/local/etc/中,默认没有php.ini主配置,但仍然加载了构建过程中启用模组的子配置,
停止临时docker容器

拷贝配置到宿主机持久化目录中:
宿主机中执行:
mkdir -p /opt/docker_lnmp/{php71_cfg,php71_log}
docker cp phpfpm-7.1.33-tmp:/usr/local/etc /opt/docker_lnmp/php71_cfg
docker cp -a phpfpm-7.1.33-tmp:/usr/local/php71/var/log /opt/docker_lnmp/php71_log
注:会拷贝到目标路径下的子目录,需要再手动拷贝出来,并纠正权限,比如log文件应该是php-fpm运行用户所有,有可读写权限,因为用的www账户,容器内和宿主机的uid/gid一样,所以在宿主机执行chown www:www -R /opt/docker_lnmp/php71_log 也可以。

php配置常见调整

php日志路径变更为 error_log = /usr/local/php71/var/log/php_errors.log
修改内存限制,上传文件大小等必要配置,
upload_max_filesize = 32M
post_max_size = 32M

php-fpm配置常见调整

注,下面一些配置在php-fpm.conf中,一些在子配置www.conf中
user = www-data
group = www-data
改为
user = www
group = www

侦听端口变更为9001
listen = 127.0.0.1:9001

php-fpm日志路径变更为 error_log = /usr/local/php71/var/log/php-fpm.log

child processes视业务场景修改

内存限制
php_admin_value[memory_limit] = 128M

停止临时docker容器,或可删除
docker stop phpfpm-7.1.33-tmp; # docker rm phpfpm-7.1.33-tmp

正式生产的容器和镜像

启动容器

docker run -dit --privileged=true
-p 9001:9001
–network custom_lnmp_bridge_net --ip 10.1.5.130
-v /opt/web:/opt/web
-v /opt/docker_lnmp/php71_cfg:/usr/local/etc
-v /opt/docker_lnmp/php71_log:/usr/local/php71/var/log
–name=phpfpm-7.1.33-v1.01 tmtcha/php:7.1.33-fpm-v1.01

测验

该环境搭配宿主机的nginx+mysql,成功访问。

最终模组结果

# php -m
[PHP Modules]
amqp
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imagick
intl
json
ldap
libxml
mbstring
mcrypt
memcached
mongodb
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pdo_sqlsrv
pgsql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
sqlsrv
standard
swoole
sysvsem
sysvshm
tidy
tokenizer
wddx
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache

镜像导出和配置备份

mkdir /opt/data_bak/backup_ever/docker_images
docker save tmtcha/php:7.1.33-fpm-v1.01 > /opt/data_bak/backup_ever/docker_images/tmtcha-php-7.1.33-fpm-v1.01.tar
cd /opt/docker_lnmp
tar czpf /opt/data_bak/backup_ever/docker_images/php71_cfg.tar.gz php71_cfg

镜像和配置下载

地址:https://download.csdn.net/download/ynz1220/88726762
(资源如果不能打开是可能正在审核中,可过一会儿或次日访问)

镜像导入和解压配置

docker load < /opt/data_bak/backup_ever/docker_images/tmtcha_phpfpm7.1.33-v1.01.tar
tar czpf /opt/data_bak/backup_ever/docker_images/php71_cfg.tar.gz -C /opt/docker_lnmp/

镜像信息

名称:tmtcha/php:7.1.33-fpm-v1.01
大小:796MB文章来源地址https://www.toymoban.com/news/detail-815222.html

到了这里,关于基于Docker官方php:7.1.33-fpm镜像构建支持67个常见模组的php7.1.33镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(61)
  • libreOffice构建docker镜像,并基于此运行项目

    一、libreOffice构建docker镜像,并启动项目 安装包准备 LibreOffice(v7.4.2): LibreOffice_7.4.2_Linux_x86-64_rpm.tar.gz LibreOffice-langpack:(v7.4.2): LibreOffice_7.4.2_Linux_x86-64_rpm_langpack_zh-CN.tar.gz jdk-8u202-linux-x64.tar.gz 打包windows字体包(C:WindowsFonts,搜索中文):fonts.tar.gz Dockerfile编写 构建镜像 启动项

    2024年02月16日
    浏览(37)
  • 训练YOLOv9-S(注意:官方还没有提供YOLOv9-S的网络,我这是根据网络博客进行的步骤,按照0.33、0.50比例调整网络大小,参数量15.60M,计算量67.7GFLOPs)

    重点参考的链接:YOLOv9改进 | 提供YOLOv9全系列支持YOLOv9n、YOLOv9s、V9m、V9l、V9x的修改方式(全网独家首发) 改前的 yolov9.yaml 参数量58.35M,计算量267.1GFLOPs 改后的 yolov9-S.yaml 参数量15.60M,计算量67.7GFLOPs 这是修改 前 调用的 yolo.py 测试的 yolov9.yaml 的打印网络情况,包含参数量、

    2024年03月27日
    浏览(67)
  • Docker-基于java8构建java项目镜像

    需求:基于openjdk:8-jdk-alpine镜像,将一个java项目构建为镜像 实现步骤: 在linux系统检查有无openjdk:8-jdk-alpine镜像 如果没有,需要去镜像仓库拉取镜像,比如DockerHub 复制命令到linux系统控制台 运行成功 在linux系统新建一个空目录,然后在目录中新建一个文件,命令为Dockerfile,

    2024年02月05日
    浏览(45)
  • Docker基础(镜像的结构,Dockerfile语法介绍,基于Ubuntu镜像来构建一个Java应用)

    要想自己构建镜像,必须先了解镜像的结构。 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。 因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运

    2024年02月20日
    浏览(49)
  • 基于Linux Alpine 制作 Java 8、11 Docker 镜像并支持中文

    Linux Alpine 1、关于linux alpine 楼主就不多介绍了,在容器化背景下, alpine 非常适合做容器基础镜像 。 2、有兴趣的同学可以转至官网查看 https://www.alpinelinux.org 制作Java镜像 1、楼主这里展示了基于 JDK1.8 和 JDK 11 的镜像制作方式 , 如下为 Dockerfile 文件 2、楼主这里增加了 glibc

    2024年02月09日
    浏览(60)
  • 基于 eclipse-temurin 构建国内时区,地区,语言的docker镜像

    在给应用构建自定义镜像时,往往需要在每次构建时去调整时区,地区这些东西;每次构建镜像都搞这些不爽,因此我们可以自己构建一个基础镜像,把系统环境都搞好,后面基于这个基础镜像构建应用镜像即可。 名称并非只能为Dockerfile ,而是docker 默认的名称是Dockerfile,

    2024年02月14日
    浏览(43)
  • 基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像

    Alpine Linux 是一款极其轻量级的 Linux 发行版,基于 busybox ,多被当做 Docker 镜像的底包(基础镜像),在使用容器时或多或少都会接触到此系统,本篇文章我们以该镜像构建 tengine-alpine 镜像。 说明:此处以 alpine 3.18.3 tengine 3.0.0 为实验进行容器镜像构建。 小巧: 基于 Musl li

    2024年02月11日
    浏览(51)
  • 注意避坑:centos7官方版镜像不支持arm架构(docker请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配)fauria/vsftpd

    注意是centos7 docker官方版镜像不支持arm架构(FROM centos:7),不是centos7不支持arm 今天基于fauria/vsftpd在我们的arm盒子上做了个docker镜像,但是用镜像run容器的时候提示: 翻译就是: 警告:请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配,并且没有请求

    2024年02月08日
    浏览(50)
  • 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

    这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在 ChatGPT 提供了 api 接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也不开放接口,所以我就1:1 自己对接了官方所有接口。 大家可以通过我的接口轻松

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包