zoukankan      html  css  js  c++  java
  • 基于官方镜像定制php-fpm容器

    PHP官方docker镜像分类

    • php:-cli

    • php:-apache

    • php:-fpm

    • php:-alpine

    制定适合生产环境的镜像

    为何要定制

    官方镜像缺少常见扩展 以php:8.0.8-fpm-alpine3.13为例

    定制步骤

    • 新建目录
      以/root/docker为例
    mkdir php/conf.d -p
    

    新建Dockerfile 输入

    FROM php:8.0.8-fpm-alpine3.13
    
    LABEL maintainer="leo leo2768@163.com"
    
    # 设置apk源为国内镜像源
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
    COPY ./conf.d/ $PHP_INI_DIR/conf.d/
    
    ENV TZ "Asia/Shanghai"
    ENV TERM xterm
    # 默认关闭opcode
    ENV OPCODE 0
    
    # 添加用户
    RUN addgroup -g 1000 -S www && adduser -s /sbin/nologin -S -D -u 1000 -G www www
    # 指定扩展版本
    ENV PHPREDIS_VERSION 5.3.4
    ENV PHPXDEBUG_VERSION 2.6.0
    ENV PHPZIP_VERSION 1.19.3
    ENV PHPSWOOLE_VERSION 4.6.7
    ENV PHPYAF_VERSION 3.3.2
    ENV PHPAMQP_VERSION 1.11.0beta
    ENV PHPMONGODB_VERSION 1.9.1
    
    # PHPIZE_DEPS 包含 gcc g++ 等编译辅助类库,完成编译后删除
    RUN apk add --no-cache $PHPIZE_DEPS 
        && apk add --no-cache libstdc++ libzip-dev vim
        && apk add rabbitmq-c-dev 
        && apk update 
        && pecl install redis-$PHPREDIS_VERSION 
        && pecl install zip-$PHPZIP_VERSION 
        && pecl install yaf-$PHPYAF_VERSION 
        && pecl install swoole-$PHPSWOOLE_VERSION 
        && pecl install mongodb-$PHPMONGODB_VERSION 
        && pecl install amqp-$PHPAMQP_VERSION 
        && docker-php-ext-enable redis zip yaf swoole mongodb amqp 
        && apk del $PHPIZE_DEPS
    
    # 安装扩展
    RUN apk add --no-cache 
           freetype 
           libpng 
           libjpeg-turbo 
           freetype-dev 
           libpng-dev 
           jpeg-dev 
           libjpeg 
           libjpeg-turbo-dev 
           libwebp 
           libwebp-dev 
        && NUMPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) 
        && docker-php-ext-install -j${NUMPROC} gd 
        && docker-php-ext-install -j${NUMPROC} pdo_mysql 
        && docker-php-ext-install -j${NUMPROC} opcache 
        && docker-php-ext-install -j${NUMPROC} bcmath  
        && docker-php-ext-install -j${NUMPROC} mysqli
    # 拷贝配置文件
    COPY  www.conf /usr/local/etc/php-fpm.d/www.conf
    
    RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
    

    新建www.conf 输入

    [www]
    user = www
    group = www
    listen = 0.0.0.0:9000
    pm = dynamic
    pm.max_children = 6
    pm.start_servers = 4
    pm.min_spare_servers = 1
    pm.max_spare_servers = 5
    

    在conf.d下新建date.ini 输入

    date.timezone = Asia/Shanghai
    

    在conf.d下新建opcode.ini 输入

    opcache.enable= 0
    enable_clopcache.enable_cli=1
    opcache.revalidate_freq=60
    opcache.max_accelerated_files=100000
    opcache.validate_timestamps=1
    

    新建build.sh 输入

    #/bin/bash
    docker build -t php8-swoole-yaf-redis-amqp:latest .
    

    目录结构如下:

    .
    |-- build.sh
    |-- conf.d
    |   |-- date.ini
    |   `-- opcode.ini
    |-- Dockerfile
    `-- www.conf
    

    执行

    sh build.sh
    

    结果:

    ...
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
    
    Build complete.
    Don't forget to run 'make test'.
    
    Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20200930/
    Installing header files:          /usr/local/include/php/
    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp.la      modules/* libs/*
    rm -f ext/opcache/jit/zend_jit_x86.c
    (1/22) Purging .phpize-deps (20210712.084651)
    (2/22) Purging autoconf (2.69-r3)
    (3/22) Purging m4 (1.4.18-r2)
    (4/22) Purging dpkg-dev (1.20.6-r0)
    (5/22) Purging perl (5.32.0-r0)
    (6/22) Purging dpkg (1.20.6-r0)
    (7/22) Purging file (5.39-r0)
    (8/22) Purging g++ (10.2.1_pre1-r3)
    (9/22) Purging gcc (10.2.1_pre1-r3)
    (10/22) Purging binutils (2.35.2-r1)
    (11/22) Purging libatomic (10.2.1_pre1-r3)
    (12/22) Purging libgomp (10.2.1_pre1-r3)
    (13/22) Purging libgphobos (10.2.1_pre1-r3)
    (14/22) Purging libc-dev (0.7.2-r3)
    (15/22) Purging musl-dev (1.2.2-r1)
    (16/22) Purging make (4.3-r0)
    (17/22) Purging re2c (1.3-r1)
    (18/22) Purging libmagic (5.39-r0)
    (19/22) Purging mpc1 (1.2.0-r0)
    (20/22) Purging mpfr4 (4.1.0-r0)
    (21/22) Purging isl22 (0.22-r0)
    (22/22) Purging gmp (6.2.1-r0)
    Executing busybox-1.32.1-r6.trigger
    OK: 41 MiB in 59 packages
    Removing intermediate container 8f12e0d4fbaf
     ---> 49e4817125f0
    Step 18/19 : COPY  www.conf /usr/local/etc/php-fpm.d/www.conf
     ---> 89f47472322f
    Step 19/19 : RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
     ---> Running in f8a1dd909182
    Removing intermediate container f8a1dd909182
     ---> d108fa70a68f
    Successfully built d108fa70a68f
    Successfully tagged php8-swoole-yaf-redis-amqp:latest
    

    进入容器查看

  • 相关阅读:
    git log后怎么退出?
    nuxt项目中怎么使用iconfont图标
    navicat连接远程数据库mysql报错2013解决方法
    navicat15激活使用
    picgo软件使用
    设置yarn源修改为淘宝源
    nuxt项目修改本地运行的端口
    nuxt项目中使用less全局样式、全局变量的配置
    带环链表 linked list cycle
    Delete a Node in Single Linked List删除单链列表中的节点
  • 原文地址:https://www.cnblogs.com/weblm/p/15003138.html
Copyright © 2011-2022 走看看