上文使用了nginx和php-fpm两个镜像组装了nginx+php环境,然而实际企业的微服务架构,nginx和php-fpm是被统一看作一个微服务供其他服务调用的;另外,配置文件和源代码也不会通过映射到容器中的方式进行,而是打包到了企业的私有镜像仓库中,最后直接把镜像部署到集群。

本教程以php-fpm作为基础镜像,安装nginx后,打包配置文件和源代码形成新的镜像,并测试运行。

准备阶段

由于php:7.2-fpm镜像使用debian作为基础操作系统,需要先替换一下debian仓库源为国内源,便于安装nginx等其他软件

deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

创建sources.list文件替换镜像内的 /etc/apt/sources.list 文件

由于docker容器运行后,有且必须只有一个进程在前台运行,当这个前台运行的程序暂停运行,容器也就会被销毁。我们规划容器运行后,让php-fpm进程后台运行,nginx进程前台运行。这样的好处是便于在开发环境,研发可以进入容器直接修改代码,重启php-fpm而容器不被销毁。

#!/bin/sh

php-fpm -D
nginx -g 'daemon off;'

创建entry.sh文件,在容器启动的时候运行,给予该文件可执行权限 

chmod +x entry.sh

编写Dockerfile文件

FROM php:7.2-fpm

# 设置时区使用北京时间
ENV TZ=Asia/Shanghai

# 替换debian国内源,便于快速安装nginx
COPY sources.list /etc/apt/sources.list

# 安装nginx,删除配置文件中的 /etc/nginx/sites-enabled 目录
RUN apt update \
    && apt install -y nginx \
    && rm -rf /etc/nginx/sites-enabled

# 拷贝nginx配置文件
ADD conf /etc/nginx/conf.d

# 设置工作目录
WORKDIR /src

# 拷贝项目源文件,打包镜像
ADD www ./

# 注意点:文件权限必须是 www-data 组,nginx和php-fpm才有权限访问
RUN chown -R www-data:www-data ./

# 执行容器启动后的命令
ADD entry.sh /
ENTRYPOINT ["/entry.sh"]

注意点:

*****文件权限必须是 www-data 组,nginx和php-fpm才有权限访问*****

打包运行镜像

docker build -t php-fpm:test .
docker run -p 8083:80 -d php-fpm:test

 相关链接

手把手教你部署nginx+php

php和nginx镜像合并 && 代码打包到镜像 

nginx-php镜像安装常用软件 

yaf && yar微服务/hprose微服务 镜像初始化 

常用开发工具:php_codesniffer代码规范检查&修复、phpstan语法检查、phpunit单元测试 

.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上) 

kustomize/kubectl自动镜像部署&&互联网企业规范化上线流程(下) 

apisix网关、JMeter压测  

prometheus/grafana监控数据收集与展示 

k8s容器网络性能调优 

supervisor进程管理 

安装opcache和apcu 

APM性能监测工具skywalking 

链路跟踪工具zipkin

phpfpm和nginx配置

php整合apollo配置中心

php rdkafka操作kafka消息队列

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐