专栏首页python3nginx+php-fpm docker镜像合二为一

nginx+php-fpm docker镜像合二为一

一、概述

在上一篇文章介绍了nginx+php-fpm,链接如下:

https://www.cnblogs.com/xiao987334176/p/12918413.html

nginx和php-fpm是2个独立的镜像,在实际环境部署过程中,发现配置比较麻烦,排错比较耗费实际。

因此,需要将nginx和php-fpm 这2个镜像合并为一个。

二、nginx+php-fpm封装

目录结构

由于crunchgeek/php-fpm:7.3-r7 镜像比较大,有1.08GB。

因此需要使用alpine:3.11重新封装才行。

在dockerhub上面,php已经有官方的镜像了,php:7.3-fpm-alpine3.11。

由于项目php7cms依赖于组件mysqli,因此需要额外安装才行。

新建目录/opt/alpine_nginx_php7.3,结构如下:

./
├── default.conf
├── dockerfile
├── index.html
├── repositories
└── run.sh

default.conf

server {
  listen 80;
  server_name localhost;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;

  location / {
    try_files $uri $uri/ =404;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

dockerfile

FROM php:7.3-fpm-alpine3.11
ADD repositories /etc/apk/repositories
ADD default.conf /
ADD index.html /
ADD run.sh /
RUN apk update && apk add nginx && \
    apk add m4 autoconf make gcc g++ linux-headers && \
    docker-php-ext-install pdo_mysql opcache mysqli && \
    mkdir /run/nginx && \
    mv /default.conf /etc/nginx/conf.d && \
    mv /index.html /var/www/html && \
    touch /run/nginx/nginx.pid && \
    chmod 755 /run.sh && \
    apk del m4 autoconf make gcc g++ linux-headers

EXPOSE 80
EXPOSE 9000

ENTRYPOINT ["/run.sh"]

注意:这里我额外安装了pdo_mysql,因为某些php项目用的是这个模块。opcache是用来做性能加速的。

index.html

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

repositories

https://mirrors.aliyun.com/alpine/v3.11/main/
https://mirrors.aliyun.com/alpine/v3.11/community/

这个是阿里云的alpine更新源

run.sh

#!/bin/sh

# 后台启动
php-fpm -D
# 关闭后台启动,hold住进程
nginx -g 'daemon off;'

封装镜像

cd /opt/alpine_nginx_php7.3docker build -t alpine_nginx_php7.3:1 .

查看镜像大小

# docker images|grep alpine_nginx_php7.3
alpine_nginx_php7.3       1                    927ddfbdd027        14 minutes ago      78.4MB

可以看到这个镜像只有78.4MB。

运行镜像

docker run -it  --name alpine_nginx_php7.3 -p 80:80 alpine_nginx_php7.3:1 .

访问首页

http://ip地址/

效果如下:

phpinfo页面

新建test.php

cd /opt/alpine_nginx_php7.3
vi test.php

内容如下:

<?php
   phpinfo();
?>

拷贝到容器中

docker cp test.php alpine_nginx_php7.3:/var/www/html/

访问test.php

http://ip地址/test.php

效果如下:

三、运行PHP7CMS

下载源代码

源代码下载地址:

http://down.chinaz.com/soft/38829.htm

下载完成后,在windows10电脑中解压。

进入linux系统,创建空目录/opt/php7cms,将解压文件夹PHP7CMS的所有内容上传到/opt/php7cms中。

此时/opt/php7cms目录结构如下:

# tree -L 1
.
├── admin.php
├── api
├── cache
├── config
├── index.php
├── install.php
├── LICENSE
├── php7cms
├── README.md
├── static
├── template
├── uploadfile
├── 安装方法.txt
└── 安装环境.docx

-L 参数表示控制深度,这里只展示第一层。

在此目录新建dockerfile

FROM alpine_nginx_php7.3:1
ADD default.conf /etc/nginx/conf.d
ADD . /var/www/html/PHP7CMS
RUN chown www-data:www-data -R /var/www/html

在此目录新建default.conf

server {
  listen 80;
  server_name localhost;
  root /var/www/html/PHP7CMS;
  index index.php index.html index.htm;

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

这个文件用来将nginx默认的配置覆盖掉

封装镜像

cd /opt/php7cms
docker build -t php7cms:1 .

运行docker

先将之前运行的nginx_php删除掉,再运行php7cms。否则会端口冲突

docker rm -f alpine_nginx_php7.3
docker run -d -it --restart=always --name php7cms -p 80:80 php7cms:1

由于php7cms依赖于mysql,还得运行一个mysql才行。

mkdir -p /data/mysql/data
docker run -d --name mysql5.7 --restart=always -e MYSQL_ROOT_PASSWORD=abcd@1234  -p 3306:3306 -v /data/mysql/data:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

新建空的数据库cms

# docker exec -it mysql5.7 /bin/bash
# mysql -u root -pabcd@1234
mysql> create database cms default character set utf8mb4 collate utf8mb4_unicode_ci;

安装向导

我的服务器ip地址为:10.212.20.213

访问安装页面

http://10.212.20.213/install.php

输入数据库连接信息

点击下一步后,提示安装完成。

登录后台页面

默认用户名和密码都是admin

登录成功后,效果如下:

访问首页

http://10.212.20.213/

效果如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • promethus监控nginx

    promethues监控nginx可选两个exporter,通过nginx_exporter主要是获取nginx-status中的内建的指标,nginx自身提供...

    py3study
  • 个人服务器常用基础配置

    yum 源仓库里最新版本的 Git 是 1.8.3.1,但是官方最新版本已经到了 2.9.2。想要安装最新版本的的 Git,只有下载源码进行安装。

    py3study
  • Ngin服务学习(3)-yum安装ngi

    cat /etc/redhat-release 查看系统版本 uname -a 查看系统内核详情

    py3study
  • centos6.5编译安装LNMP架构web环境

    作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。

    用户3094376
  • CentOS7上安装并配置Nginx、PHP、MySql

    除了systemctl start nginx之外,常用的相关命令还有systemctl stop nginx、systemctl restart nginx、...

    herve
  • CentOS 7 yum一键安装lnmp。仅限小白体验,大神轻喷!

    使用此脚本安装lnmp的服务器必须能出公网,目前只支持CentOS 7以上版本。 2018-06-04更新 Nginx更新至1.14.0、默认关闭selinu...

    瞎扯淡的砸壳猴
  • mac上nginx+jetty负载均衡部署一览

    曾经在windows上进行编程,因为linux系统在服务器端应用比较广泛,专门学了shell脚本,在笔记本上装过一个deepin(linux发行版)进行开发,d...

    java达人
  • Nginx网站服务

    L宝宝聊IT
  • docker完整配置nginx+php+mysql

      docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:

    smy
  • 你的nginx访问过慢?增加个模块吧!

    ngx_pagespeed 是nginx web服务器的一个模块,通过安装它你的网站加载速度将会“嗖”的一下上升。

    新巴子

扫码关注云+社区

领取腾讯云代金券