三、php环境之php的docker镜像制作

2023-07-04 17:37:55 浏览数 (1)

往期回顾

一.docker的安装
二.php环境之nginx的docker镜像制作

上期已经讲了php环境所需的nginx镜像的制作并测试了使用制作的镜像起的容器提供的静态站点页面的访问,那么接下来我们就准备在上一期的镜像基础上再装入php做成php-nginx的镜像包

创建一个新容器 安装php

用我们做好nginx镜像运行创建一个新的容器

docker run -it my/lnp:v1 /bin/bash

下载对应版本php安装包

php版本的选择 见后面的常见问题归纳(php) 1

代码语言:shell复制
cd /tmp
wget https://www.php.net/distributions/php-7.4.30.tar.gz
#或使用镜像地址
wget -O /tmp/php-7.4.30.tar.gz http://cn2.php.net/get/php-7.4.30.tar.gz/from/a/mirror

wget命令及下载包的格式检测问题 见后面的常见问题归纳(php) 2

解压到指定目录

tar -zxvf /tmp/php-7.4.30.tar.gz -C /usr/local/

添加www用户组

查看所有用户组信息

cat /etc/group [| grep 你要查的用户组字符串]

查看所有用户信息

cat /etc/passwd [| grep 你要查的用户字符串]

有了就不用再建了

代码语言:shell复制
groupadd www
useradd -g www www

进入目录准备进行编译安装

cd /usr/local/php-7.4.30

配置configure

为了保持和原有项目的配置一致,可以在原项目上运行phpinfo();其中的 Configure Command 选项就是原先项目的php配置,可以直接复制出来去除'即可

代码语言:txt复制
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache

安装配置依赖包

然后不断根据提示 yum -y install 对应的依赖包

根据configure配置的报错 一步一步安装对应缺失的依赖包即可(因为环境不同,可能需要安装的依赖包也有所不同,可以报错了去百度对应的依赖包需要安装什么)以下是我的安装过程,供参考:

代码语言:shell复制
Package 'libxml2', required by 'virtual:world', not found

yum install -y libxml2-devel

Package 'sqlite3', required by 'virtual:world', not found

yum -y install sqlite-devel

Package 'libcurl', required by 'virtual:world', not found

yum -y install libcurl-devel 

Package 'icu-uc', required by 'virtual:world', not found
Package 'icu-io', required by 'virtual:world', not found
Package 'icu-i18n', required by 'virtual:world', not found

yum install -y libicu-devel

Package 'oniguruma', required by 'virtual:world', not found

Package 'oniguruma', required by 'virtual:world', not found

yum -y install oniguruma
yum -y install oniguruma oniguruma-devel
Error: Unable to find a match: oniguruma-devel

# 我docker环境的centos 8.5.2111 安装oniguruma-devel异常,百度需要手动编译安装

# 处理参考:https://www.cnblogs.com/lyc94620/p/13201379.html
wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O /tmp/oniguruma-6.9.4.tar.gz
#上面的链接下载不了的话可换成下面这个试试
wget http://down.24kplus.com/linux/oniguruma/oniguruma-6.9.4.tar.gz
tar -zxf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4
./autogen.sh && ./configure --prefix=/usr
make && make install

#安装完成后删除对应包
rm -rf oniguruma-6.9.4
rm -rf oniguruma-6.9.4.tar.gz

或者现在可以把你的 configure 配置项和环境信息告诉gbt,让gbt告诉你需要提前安装的依赖包

代码语言:txt复制
#gbt根据./configure 给的预安装包
yum install -y gcc gcc-c   make autoconf automake zlib-devel libxml2-devel bzip2-devel openssl-devel curl-devel gd-devel libjpeg-devel libpng-devel freetype-devel readline-devel libxslt-devel libmcrypt-devel libicu-devel

直到出现 下面这段 或是 echo $? 返回 0便编译成功了

代码语言:txt复制
...
Thank you for using PHP.
...

编译安装(需要花一些时间安装 >10分钟)

make && make install && make clean

检测安装及相关配置项配置

检测安装是否成功

/usr/local/php/bin/php -v

配置php命令全局使用

方法一 添加环境变量

代码语言:txt复制
vi /etc/profile 
#文件最后中加入这一行
PATH=$PAHT:/usr/local/php/bin
#运行下面命令
source /etc/profile

按上述操作 就可以直接使用 php命令了,但这个方法有个问题退出当前shell重新链接后 需要再次执行 source /etc/profile 才生效,否则 还是 -bash: php: command not found

  • 查询相关原因

~/.bashrc: 用户级别的Bash Shell配置文件,当一个用户登录系统时,该文件会自动执行。

/etc/bashrc: 系统级别的Bash Shell配置文件,对于所有用户都有效。

/etc/profile: 系统级别的Shell环境配置文件,对于所有Shell类型(包括Bash)都有效。

将环境变量添加到/etc/profile可以让它对所有Shell生效,但是,当您重新打开Shell时,它不会自动加载/etc/profile,因此您需要手动运行source /etc/profile以使更改生效。

为了避免手动输入命令,您可以将source /etc/profile添加到~/.bashrc~/.bash_profile文件中,这样每次打开一个新的终端窗口时,它都会自动加载/etc/profile并更新环境变量。只需在文件的末尾添加以下代码即可:

代码语言:txt复制
bash
if [ -f /etc/profile ]; then
  source /etc/profile
fi

这个代码片段检查/etc/profile文件是否存在,并且如果存在,则自动运行source命令加载它。

方法二 创建一个软链接

直接在原有的命令环境下创建一个软链接即可,简单方便

代码语言:txt复制
#查看原来的环境变量
[root@xxx /]# echo $PATH
/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#直接在原来的/usr/bin 命令环境下加一个php的命令软链接就行
[root@xxx /]# ln -s /usr/local/php/bin/php /usr/bin/php

php相关配置

复制相关默认配置文件

cp /usr/local/php-7.4.30/php.ini-production /usr/local/php/etc/php.ini

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

修改php-fpm配置

具体参数项参考 php-fpm.conf配置说明及demo

代码语言:shell复制
[root@xxx /]# vi /usr/local/php/etc/php-fpm.conf

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

[www]
;listen = /tmp/php-cgi.sock
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www

;pm = dynamic
pm = static
pm.max_children = 60
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 60

request_terminate_timeout = 30
request_slowlog_timeout = 2
slowlog = var/log/slow.log

pm.status_path = /fpm-status

启动 php-fpm

代码语言:shell复制
# 运行php-fpm
/usr/local/php/sbin/php-fpm

# 指定配置文件启动 PHP-FPM 服务
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

#为了方便直接使用php-fpm命令启动,也可以给php-fpm创建一个软链接
ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm

#查看对应php-fpm进程是否正常启动
ps -ef | grep php-fpm

#杀掉所有的php-fpm进程(pid具体地址看php-fpm.conf的设置)
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

#或是查找方式杀
ps -ef |grep php-fpm | grep -v grep | awk '{print $2}' | xargs kill -9

nginx与php服务的启动关停脚本

  • 根目录下创建启动脚本 /start.sh
代码语言:shell复制
#!/bin/bash

# 指定配置文件启动 PHP-FPM 服务
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

# 指定配置文件启动 Nginx 服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

# PHP加入环境变量 使环境变量生效(因为再/usr/bin/下已经创建了php的快捷链接所以这里不需要执行这个了)
# source /etc/profile
  • 根目录下创建关停脚本 /stop.sh
代码语言:shell复制
#!/bin/bash

#杀掉所有的php-fpm进程(pid具体地址看php-fpm.conf的设置)
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

#关闭nginx服务
/usr/local/nginx/sbin/nginx -s stop
  • 启动、关闭服务测试
代码语言:shell复制
#运行服务
[root@xxx /]# /start.sh

#关闭服务
[root@xxx /]# /stop.sh

#检测服务是否存在
[root@xxx /]# ps -ef | grep nginx
[root@xxx /]# ps -ef | grep php-fpm

相关索引

php-fpm.conf配置说明及demo
常见问题归纳 (php环境docker制作)
一.docker的安装
二.php环境之nginx的docker镜像制作

0 人点赞