[每周一更]-(第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 0

COPY ./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/composer

RUN 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值