docker nginx镜像+phpfpm 镜像 组合配置 搭建 PHP+nginx 环境

时间:2021-09-21 20:32:18

前言


在以往的容器环境部署中 运行环境 我们通常把 类似 apache nginx php 等 打包在一个镜像中 起一个容器。 这样做的好处是 方便 简单。 不便的地方是 如果PHP 需要扩展新的 相关组件就麻烦了。例如笔者之前用的 apache+php 组合在一个镜像中 需要添加 php-redis 扩展,就很麻烦 因为这个扩展需要重新编译(常见的扩展只需要添加 或者安装 )。 如果编译的化 时间久依赖多 问题多。

并且 nginx php-fpm 相关软件都是 独立开源软件 官方并不提供完整组合 套件 ; 放在一个容器中 拼凑起来 对新人 不太方便; 今天通过 摸索 可以实现 通过组合来搭建 php 运行环境。

php

php 官方镜像构建

#使用国内网易镜像可以加快构建速度
FROM hub.c.163.com/library/php:fpm-alpine
#FROM php:fpm-alpine

MAINTAINER Alu alu@xdreport.com

#国内repo源,让本地构建速度更快。
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

#安装GD依赖库
RUN apk add --no-cache --virtual .build-deps \
                freetype-dev \
                libjpeg-turbo-dev \
                libpng-dev \
                libmcrypt-dev

#添加php源码中的扩展,添加gd,mysqli,pdo-mysql,opcache,gettext,mcrypt等扩展
RUN set -ex \
        && docker-php-ext-configure gd \
                --with-freetype-dir=/usr/include/freetype2/freetype \
                --with-jpeg-dir=/usr/include \
                --with-png-dir=/usr/include \
        && docker-php-ext-install gd bcmath zip opcache iconv mcrypt pdo pdo_mysql mysqli

#redis属于pecl扩展,需要使用pecl命令来安装,同时需要添加依赖的库
RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS \
        && pecl install redis-3.1.2 \
        && docker-php-ext-enable redis \
        && apk del .phpize-deps
nginx

# 习惯nginx alpine 这个版本 因为小 7M
docker pull nginx:alpine
nginx 配置
  • /etc/nginx/conf.d/default.conf
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ .php$ {
        #root           /usr/share/nginx/html;
        root           /var/www/html;   # `这个配置 用 php-fmp 镜像 容器中的 PHP 根目录地址  切记这个不是 nginx web根目录地址 这个问题折腾了我好久`
        fastcgi_pass   phpfpm:9000;  # 修改这个地址为 phpfpm 容器的名称  我的容器名称就是 phpfmp
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
组合(rancher)
phpfpm:
  tty: true
  image: hub.03in.com:5002/ranmufei/phpalpine-redis:v1
  volumes:
  - /home/www/nginx4/html:/var/www/html
  stdin_open: true
nginx4:
  ports:
  - 7575:80/tcp
  tty: true
  image: nginx:alpine
  links:
  - phpfpm:phpfmp
  volumes:
  - /home/www/nginx4/html:/usr/share/nginx/html
  - /home/www/nginx4/conf/default.conf:/etc/nginx/conf.d/default.conf
  - /home/www/nginx4/conf/nginx.conf:/etc/nginx/nginx.conf
  stdin_open: true