当前位置: 首页 > news >正文

[每周一更]-(第64期):Dockerfile构造php定制化镜像

在这里插入图片描述

利用php官网镜像php:7.3-fpm,会存在部分插件缺失的情况,自行搭建可适用业务的镜像,才是真理
Dockerhub 上 PHP 官方基础镜像主要分为三个分支:

  • cli: 没有开启 CGI 也就是说不能运行fpm。只可以运行命令行。
  • fpm: 开启了CGI,可以用来运行web服务也可以用来运行cli命令。
  • zts: 开启了线程安全的版本。

在这里插入图片描述

1、继承基础镜像

FROM php:7.3-fpm
  • 指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
  • 必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 开始
    2、安装PHP扩展

2、安装扩展

2.1、安装dockerhub中php官方提供的扩展

  • 安装一些常用的组件:pdo、pdo_mysql等
FROM php:7.3-fpm
docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath# 扩展指定一些自定义的编译参数的话
FROM php:7.3-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd

2.2、使用PECL安装扩展

RUN pecl install grpc \
&& docker-php-ext-enable grpc \
&& pecl install -o -f redis \
&& docker-php-ext-enable redis \
&& rm -rf /tmp/pear

2.3、源码安装扩展

  • 针对复杂插件
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
&& mkdir -p /tmp/xcache \
&& tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
&& rm xcache.tar.gz \
&& docker-php-ext-configure /tmp/xcache --enable-xcache \
&& docker-php-ext-install /tmp/xcache \
&& rm -r /tmp/xcache

3.开源的镜像库

  • webdevops/php-nginx:7.3-alpine
  • firehmx/php-7.3.33-fpm-alpine3.14:v1

4.实际例子

构造一个php7.3.33的镜像

4.1、查看官方基础镜像有什么扩展:

docker run  php:7.3.34-fpm-alpine3.14  php -m

4.2、安装

安装创建库:redis、zip、gd、bcmath、pdo_mysql、opcache

  • redis:redis是目前主流的Nosql数据库,常用。
  • zip:文件压缩扩展。
  • gd:图片处理扩展,一些图形验证码的生成不能没有这个扩展。
  • bcmath:没有这个库的话可能一些框架或者类库的composer依赖校验会无法通过。
  • pdo_mysql:连接数据库扩展。
  • opcache: 是 PHP 中的 Zend 扩展,可以大大提升 PHP 的性能。
4.2.1 创建工程目录
# 创建目录
mkdir lnmp/php -p
cd lnmp/php/# compser地址:https://github.com/composer/composer/releases
--
wget  https://github.com/composer/composer/releases/download/2.6.3/composer.phar# 配置文件1
mkdir conf.d
echo "date.timezone = Asia/Shanghai" > conf.d/date.ini# 配置文件2
# 这里加 \EOF 是防止${OPCODE}被转义
--
cat >> conf.d/opcode.ini << \EOF
opcache.enable=${OPCODE}
enable_clopcache.enable_cli=1
opcache.revalidate_freq=60
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
EOF
# 配置文件3
cat www.conf 
--
[www]
user = www
group = www
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 50# Dockerfile
touch Dockerfile
--
FROM php:7.3.33-fpm-alpine3.14
LABEL MAINTAINER="ifanaticfire@gmail.com"
ENV TZ "Asia/Shanghai"
ENV TERM xterm
# 默认关闭opcode
ENV OPCODE 0COPY ./conf.d/ $PHP_INI_DIR/conf.d/
COPY composer.phar /usr/local/bin/composer
COPY www.conf /usr/local/etc/php-fpm.d/www.conf
# 创建www用户
RUN addgroup -g 1000 -S www && adduser -s /sbin/nologin -S -D -u 1000 -G www www
# 配置阿里云镜像源,加快构建速度
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories# PHPIZE_DEPS 包含 gcc g++ 等编译辅助类库,完成编译后删除
RUN apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache libstdc++ libzip-dev vim\
&& apk update \
&& pecl install redis-5.3.4 \
&& pecl install zip \
&& pecl install swoole \
&& docker-php-ext-enable redis zip swoole\
&& apk del $PHPIZE_DEPS
# docker-php-ext-install 指令已经包含编译辅助类库的删除逻辑
RUN apk add --no-cache freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev \
&& apk update \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install -j$(nproc) pdo_mysql \
&& docker-php-ext-install -j$(nproc) opcache \
&& docker-php-ext-install -j$(nproc) bcmath \
&& docker-php-ext-install -j$(nproc) mysqli \
&& chmod +x /usr/local/bin/composerRUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
EXPOSE 9000
ENTRYPOINT ["php-fpm"]# 构建脚本
cat build-command.sh
--
docker build -t php-7.3.33-fpm-alpine3.14:v1 .# 运行脚本
sh build-command.sh # 查看镜像
docker images
---
php-7.3.33-fpm-alpine3.14    v1                      088d571602a3   43 minutes ago   116MB查看构建镜像:116M

4.3 推送到dockerhub

docker tag php-7.3.33-fpm-alpine3.14:v1 firehmx/php-7.3.33-fpm-alpine3.14:v1# 未登录的话 docker login 登录
docker push   firehmx/php-7.3.33-fpm-alpine3.14:v1

参考

  • https://segmentfault.com/a/1190000018372614
  • https://www.cnblogs.com/syushin/p/14955582.html
  • https://hub.docker.com/_/php
  • https://github.com/suyar/docker-php
http://www.lryc.cn/news/179306.html

相关文章:

  • 若依不分离+Thymeleaf select选中多个回显
  • OCX 添加方法和事件 HTML调用ocx函数及回调 ocx又调用dll VS2017
  • 苹果iPhone手机使用草柴返利APP查询领取淘宝天猫京东优惠券如何取消关闭粘贴商品链接时的弹窗提示?
  • 主机安装elasticsearch后无法登陆
  • 【面试题精讲】JavaSe和JavaEE的区别
  • React 全栈体系(十五)
  • 【逆向】(c++)分析pe结构,拉伸pe结构,缩小pe结构
  • PyTorch实战:常用卷积神经网络搭建结构速览
  • 排序算法之【快速排序】
  • 声明式调用 —— SpringCloud OpenFeign
  • LuatOS-SOC接口文档(air780E)-- fota - 底层固件升级
  • 第二章 Introduction
  • WebGL 渲染三维图形作为纹理贴到另一个三维物体表面
  • 国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄
  • Source Insight 工具栏图标功能介绍
  • 模板与泛型编程-函数模板
  • 了解ActiveMQ、RabbitMQ、RocketMQ和Kafka的特点
  • 第七章 用户和组管理
  • 给奶牛做直播之三
  • 【Java 进阶篇】MySQL 数据控制语言(DCL):管理用户权限
  • WPF 03
  • Android 使用kotlin+注解+反射+泛型实现MVP架构
  • 数据结构——堆(C语言)
  • B058-SpringBoot
  • 龙迅LT9611UXC 2PORT MIPICSI/DSI转HDMI(2.0)转换器+音频,内置MCU
  • STM32存储左右互搏 I2C总线读写FRAM MB85RC1M
  • 1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串
  • ElementUI之CUD+表单验证
  • Linux:nginx---web文件服务器
  • go 端口转发 代理V2 --chatGPT