基于centos

  1. FROM docker.io/centos:centos7.6.1810
  2. ENV PHP_VERSION 5.6.40
  3. ENV LANG "en_US.UTF-8"
  4. RUN set -x && \
  5. yum install -y epel-release \
  6. make \
  7. gcc \
  8. gcc-c++ \
  9. gd-devel \
  10. libxml2-devel \
  11. libcurl-devel \
  12. openssl-devel \
  13. libjpeg-devel \
  14. libpng-devel \
  15. libxslt-devel \
  16. libtidy-devel \
  17. pcre-devel \
  18. freetype-devel \
  19. libmcrypt-devel \
  20. autoconf \
  21. vim \
  22. net-tools \
  23. telnet \
  24. curl && \
  25. # Add user
  26. #mkdir -p /data/www && \
  27. useradd -M -s /sbin/nologin www && \
  28. # Download php
  29. mkdir -p /home/php && \
  30. cd $_ && \
  31. curl -Lk http://ftp.ntu.edu.tw/php/distributions/php-$PHP_VERSION.tar.gz | gunzip | tar x -C /home/php && \
  32. # Make install php
  33. cd /home/php/php-$PHP_VERSION && \
  34. ./configure --prefix=/usr/local/php \
  35. --with-config-file-path=/usr/local/php/etc \
  36. --with-config-file-scan-dir=/data/phpextini \
  37. --with-fpm-user=www \
  38. --with-fpm-group=www \
  39. --with-mysqli \
  40. --with-pdo-mysql \
  41. --with-openssl \
  42. --with-gd \
  43. --with-iconv \
  44. --with-zlib \
  45. --with-gettext \
  46. --with-curl \
  47. --with-png-dir \
  48. --with-jpeg-dir \
  49. --with-freetype-dir \
  50. --with-xmlrpc \
  51. --with-mhash \
  52. --enable-fpm \
  53. --enable-xml \
  54. --enable-shmop \
  55. --enable-sysvsem \
  56. --enable-inline-optimization \
  57. --enable-mbregex \
  58. --enable-mbstring \
  59. --enable-ftp \
  60. --enable-mysqlnd \
  61. --enable-pcntl \
  62. --enable-sockets \
  63. --enable-zip \
  64. --enable-soap \
  65. --enable-session \
  66. --enable-opcache \
  67. --enable-bcmath \
  68. --enable-exif \
  69. --enable-fileinfo \
  70. --disable-rpath \
  71. --enable-ipv6 \
  72. --disable-debug \
  73. --without-pear && \
  74. make && make install &&\
  75. # Clean OS
  76. yum remove -y gcc \
  77. gcc-c++ \
  78. make \
  79. autoconf && \
  80. yum clean all && \
  81. rm -rf /tmp/* /var/cache/yum/* && \
  82. find /var/log -type f -delete && \
  83. rm -rf /home/php && \
  84. # Change own for webdir
  85. #chown -R www:www /data/www && \
  86. # Set timezone
  87. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  88. # Set log
  89. ln -sf /dev/stdout /usr/local/php/var/log/php-fpm.log
  90. #ln -sf /dev/stderr /usr/local/php/var/log/\$pool.log.slow
  91. ENV PATH $PATH:/usr/local/php/sbin
  92. # Config php.ini
  93. COPY php.ini /usr/local/php/etc/
  94. # Config php-fpm.conf
  95. COPY php-fpm.conf /usr/local/php/etc/
  96. #USER www
  97. WORKDIR /usr/local/php
  98. EXPOSE 9000
  99. CMD ["php-fpm"]

centos-alpine.gif

基于alpine-php多阶段构建最小镜像

  1. #This is DockerFile based on the alpine image as PHP
  2. FROM alpine:3.5 as build
  3. LABEL MAINTAINER="Dreambeer@126.com"
  4. ENV LANG "en_US.UTF-8"
  5. ENV PHP_VERSION 5.6.40
  6. ENV LIBICONV_VERSION 1.9.2
  7. ARG CPU_NUM
  8. RUN addgroup -S www && \
  9. adduser -s /sbin/nologin -S -D -G www www && \
  10. #处理依赖
  11. sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
  12. apk update && \
  13. apk upgrade && \
  14. set -xe && \
  15. apk add --no-cache libmemcached-libs libevent curl-dev yaml && \
  16. apk add --no-cache g++ gcc make libssh2-dev libxml2-dev libjpeg-turbo-dev libpng-dev freetype-dev -U gettext-dev libcurl && \
  17. #下载编译libiconv
  18. wget -P /usr/local/ http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz && \
  19. cd /usr/local/ && \
  20. tar zxvf libiconv-$LIBICONV_VERSION.tar.gz && \
  21. cd /usr/local/libiconv-$LIBICONV_VERSION && \
  22. ./configure --prefix=/usr/local/iconv && \
  23. make -j$CPU_NUM && make install && \
  24. #dl-3.alpinelinux源下载libcurl包(上面dl-cdn.alpinelinux有时不可用)
  25. #RUN apk add --no-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing libcurl
  26. #ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
  27. #此处openssl不建议删除,更换版本或依赖包失效可通过下面方式解决openssl依赖
  28. #wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz && \
  29. #tar -zxvf openssl-1.0.2u.tar.gz && \
  30. #cd openssl-1.0.2u && \
  31. #./config --prefix=/usr/local --openssldir=/usr/local/openssl && \
  32. #make -j$CPU_NUM && make install
  33. #下载PHP包
  34. wget -P /usr/local/ http://downloads.ichzh.com/Php/php-$PHP_VERSION.tar.gz && \
  35. cd /usr/local/ && \
  36. tar -zxvf php-$PHP_VERSION.tar.gz && \
  37. #配置编译安装PHP
  38. cd /usr/local/php-$PHP_VERSION && \
  39. ./configure --prefix=/usr/local/php \
  40. --with-config-file-path=/usr/local/php/etc \
  41. --with-config-file-scan-dir=/data/phpextini \
  42. --with-fpm-user=www \
  43. --with-fpm-group=www \
  44. --with-mysqli \
  45. --with-pdo-mysql \
  46. --with-openssl \
  47. --with-gd \
  48. --with-iconv=/usr/local/iconv \
  49. --with-zlib \
  50. --with-gettext \
  51. --with-curl \
  52. --with-png-dir \
  53. --with-jpeg-dir \
  54. --with-freetype-dir \
  55. --with-xmlrpc \
  56. --with-mhash \
  57. --enable-fpm \
  58. --enable-xml \
  59. --enable-shmop \
  60. --enable-sysvsem \
  61. --enable-inline-optimization \
  62. --enable-mbregex \
  63. --enable-mbstring \
  64. --enable-ftp \
  65. --enable-mysqlnd \
  66. --enable-pcntl \
  67. --enable-sockets \
  68. --enable-zip \
  69. --enable-soap \
  70. --enable-session \
  71. --enable-opcache \
  72. --enable-bcmath \
  73. --enable-exif \
  74. --enable-fileinfo \
  75. --disable-rpath \
  76. --enable-ipv6 \
  77. --disable-debug \
  78. --without-pear && \
  79. make -j$CPU_NUM && make install && \
  80. #拷贝模板配置文件到并修改名称,修改配置文件"daemonize = no",注每段开始“;”为注释符修改配置后需去除
  81. cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
  82. sed -i "89s#;daemonize = yes#daemonize = no#" /usr/local/php/etc/php-fpm.conf &&\
  83. sed -i -e 's@;pid = run/php-fpm.pid@pid = run/php-fpm.pid@g' -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /usr/local/php/etc/php-fpm.conf
  84. FROM alpine:3.5
  85. ENV PATH $PATH:/usr/local/php/sbin
  86. ENV LANG "en_US.UTF-8"
  87. COPY --from=build /usr/local/php/ /usr/local/php/
  88. COPY --from=build /usr/local/iconv /usr/local/
  89. # COPY php.ini /usr/local/php/etc/
  90. # COPY php-fpm.conf /usr/local/php/etc/
  91. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
  92. apk update && \
  93. apk upgrade && \
  94. set -xe && \
  95. apk add --no-cache libxml2-dev libjpeg-turbo-dev libpng-dev freetype-dev -U gettext-dev libcurl && \
  96. apk add --no-cache net-tools vim && \
  97. addgroup -S www && \
  98. adduser -s /sbin/nologin -S -D -G www www && \
  99. #设置时区以及连接log文件
  100. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  101. ln -sf /dev/stdout /usr/local/php/var/log/php-fpm.log
  102. EXPOSE 9000
  103. WORKDIR /usr/local/php
  104. CMD ["php-fpm"]
  105. #构建镜像时根据cpu核数修改CPU_NUM=<核数>
  106. #查看核数"cat /proc/cpuinfo | grep processor | wc -l"
  107. # docker build -t php:test --build-arg CPU_NUM=16 .

duojiedian.gif

验证php

nginx端修改配置文件

  1. location ~ \.php$ {
  2. include fastcgi_params;
  3. fastcgi_pass unix:/tmp/php-fcgi.sock;
  4. fastcgi_index index.php;
  5. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  6. }

配置说明:

  • fastcgi_params文件在/usr/local/nginx/conf/下面,其内容为fastcgi相关的变量
  • fastcgi_pass后面跟的是php-fpm服务监听地址,可以是IP:PORT,也可以是unix socket地址,也支持upstream的地址
  • fastcgi_index定义索引页,如果在server内其他部分有定义index参数,该配置可以忽略
  • fastcgi_param这行其实可以在fastcgi_params文件里面定义SCRIPT_FILENAME变量,这个变量如果不定义,php的请求是没办法访问的。

在配置的