使用Dockerfile基于7.4-apache-buster镜像搭建php7.4微服务环境
suiw9 2024-11-08 14:53 40 浏览 0 评论
1. 介绍
1.1 介绍
大家根福哥学会了使用Dockerfile创建Docker镜像的技巧了,那么我们现在搭建服务器环境就不需要再去下载软件的源代码了,也不需要编译安装了,更加不用操心软件和操作系统的各种兼容问题了。
今天福哥带着大家先安装php的环境,基于微服务思维一个Docker里面只安装最基本的软件即可,而单独的php能做的事情不多,还是需要一个web服务器搭配使用的,福哥最后选择的是就php-7.4-apache这个镜像作为基础镜像了。
2. 镜像
2.1 tag
php7.4-apache的tag有很多,福哥选择的是php-7.4-apache-buster版本,这个版本是基于debian操作系统的。
2.2 结构
照例我们先把镜像拉取下来,然后启动一个容器,看看里面都有什么,弄明白了自己才好捣鼓啊!
2.2.1 拉取镜像
docker pull php:7.4-apache-buster
2.2.2 启动临时容器
docker run -tid --name php7.4 -h php7.4 php:7.4-apache-buster
2.2.3 切入临时容器
docker exec -ti php7.4 "/bin/bash"
2.2.4 查看目录结构
php程序
root@php7:/var/www/html# ls /usr/local/bin/php*
/usr/local/bin/php /usr/local/bin/php-config /usr/local/bin/phpdbg /usr/local/bin/phpize
php配置文件
root@php7:/var/www/html# ls /usr/local/etc/php/
conf.d php.ini-development php.ini-production
apache程序
root@php7:/var/www/html# ls /usr/sbin/apache*
/usr/sbin/apache2 /usr/sbin/apache2ctl /usr/sbin/apachectl
apache配置文件
root@php7:/var/www/html# ls /etc/apache2/
apache2.conf conf-enabled magic mods-enabled sites-available
conf-available envvars mods-available ports.conf sites-enabled
2.2.5 停止临时容器
docker stop php7.4
2.2.6 删除临时容器
docker rm php7.4
3. PHP源代码
3.1 docker-php-source
如果需要源代码可以使用docker-php-source的extract命令将源代码导入到容器的/usr/src/php下面。
docker-php-source extract
用完了可以使用docker-php-source的delete命令删除掉源代码。
docker-php-source delete
4. PHP扩展
4.1 docker-php-ext-install
4.1.1 安装
安装扩展通过docker-php-ext-install命令,例如:福哥要安装mysql支持的话。
docker-php-ext-install pdo_mysql
4.1.2 卸载
对不起,没有!因为你不需要就不会去安装它嘛,既然安装了就得用它了!
4.2 docker-php-ext-configure
docker-php-ext-configure是用来给docker-php-ext-install安装扩展时候添加自定义参数的,正常情况下docker-php-ext-install安装扩展只会使用默认参数。
4.3 docker-php-ext-enable
4.3.1 启用
启用扩展通过docker-php-ext-enable命令,例如:福哥要启用mysql支持的话。
docker-php-ext-enable pdo_mysql
4.3.2 禁用
对不起,一样的没有,不想用就别启用咯~~
5. 手动安装
福哥先在临时容器里面手动安装一遍环境,然后再整理到Dockerfile里面,这样大家会看得比较清楚一些~~
5.1 更新apt
我们需要安装一些工具,需要用到apt命令,用之前需要先更新一下。
apt-get update
5.2 安装依赖库和工具
部分扩展需要从外面下载,所以wget还是需要的。
apt-get -y install wget libc-client-dev libkrb5-dev libzip-dev
5.3 准备安装包目录
我们还是建立一个目录用来保存软件的安装包。
mkdir /packages
cd /packages
5.4 安装redis扩展
使用下面的命令可以安装redis扩展。
wget http://pecl.php.net/get/redis-4.1.0.tgz
tar -xzvf redis-4.1.0.tgz
cd redis-4.1.0
/usr/local/bin/phpize
./configure --with-php-config=/usr/local/bin/php-config
make && make install
cd ../
安装完毕后使用docker-php-ext-enable启用redis扩展。
docker-php-ext-enable redis
5.5 安装imap扩展
先设置一些配置参数。
docker-php-ext-configure imap --with-kerberos --with-imap-ssl
现在就可以安装imap扩展了。
docker-php-ext-install imap
安装完毕后使用docker-php-ext-enable启用imap扩展。
docker-php-ext-enable imap
5.6 安装zlib扩展
可以直接安装zlib扩展。
docker-php-ext-install zlib
安装完毕后使用docker-php-ext-enable启用zlib扩展。
docker-php-ext-enable zlib
5.7 安装mongodb扩展
使用下面的命令可以安装mongodb扩展
wget http://pecl.php.net/get/mongodb-1.7.4.tgz
tar -xzvf mongodb-1.7.4.tgz
cd mongodb-1.7.4
/usr/local/bin/phpize
./configure --with-php-config=/usr/local/bin/php-config
make && make install
cd ../
安装完毕后使用docker-php-ext-enable启用mongodb扩展。
docker-php-ext-enable mongodb
6. 配置
6.1 配置文件
使用生产环境的配置文件模板复制出php.ini文件。
cd /usr/local/etc/php/
cp php.ini-production php.ini
6.2 关闭错误提示
display_errors = Off
6.3 设置错误级别
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
6.4 设置错误日志
error_log = /var/log/php_errors.log
6.5 设置时区
date.timezone = Asia/Shanghai
7. 测试
通过执行一段代码测试时区设置和错误设置是否正确。
php -r "echo \"Now is \". date(\"Y-m-d H:i:s\"). \"\n\";bad_fun_call();"
7.1 时间
时间没有问题。
Now is 2021-05-12 12:21:50
7.2 错误日志
错误日志也没有问题。
root@php7:/usr/local/etc/php# cat /var/log/php_errors.log
[12-May-2021 12:21:50 Asia/Shanghai] PHP Fatal error: Uncaught Error: Call to undefined function bad_fun_call() in Command line code:1
Stack trace:
#0 {main}
thrown in Command line code on line 1
7.3 扩展模块
7.3.1 通过phpinfo验证
通过phpinfo查看前面安装的模块,可以看到全部都生效了。
7.3.2 通过代码验证
验证redis扩展
php -r "var_dump(class_exists('Redis'));"
验证mongodb扩展
php -r "var_dump(class_exists('\MongoDB\Driver\Manager'));"
8. Dockerfile
最后福哥把前面的设置命令整理到一起写成Dockerfile,这样大家就可以通过Dockerfile安装环境了。
FROM php:7.4-apache-buster
MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER https://tongfu.net/dockerfile
MAINTAINER 2021/5/12
MAINTAINER v1.0.0
EXPOSE 80 443
WORKDIR /var/www/html
# env
RUN apt-get update \
&& apt-get -y install wget libc-client-dev libkrb5-dev libzip-dev
# source extract
RUN docker-php-source extract
# package build
RUN mkdir /packages
# redis extension
RUN cd /packages \
&& wget http://pecl.php.net/get/redis-4.1.0.tgz \
&& tar -xzvf redis-4.1.0.tgz \
&& cd redis-4.1.0 \
&& /usr/local/bin/phpize \
&& ./configure --with-php-config=/usr/local/bin/php-config \
&& make && make install \
&& cd ../ \
&& docker-php-ext-enable redis
# imap extension
RUN docker-php-ext-configure imap \
--with-kerberos \
--with-imap-ssl \
&& docker-php-ext-install imap \
&& docker-php-ext-enable imap
# zlib extension
RUN mv /usr/src/php/ext/zlib/config0.m4 /usr/src/php/ext/zlib/config.m4 \
&& docker-php-ext-install zlib \
&& docker-php-ext-enable zlib
# mongodb extension
RUN cd /packages \
&& wget http://pecl.php.net/get/mongodb-1.7.4.tgz \
&& tar -xzvf mongodb-1.7.4.tgz \
&& cd mongodb-1.7.4 \
&& /usr/local/bin/phpize \
&& ./configure --with-php-config=/usr/local/bin/php-config \
&& make && make install \
&& cd ../ \
&& docker-php-ext-enable mongodb
# confiugure
RUN cd /usr/local/etc/php \
&& cp php.ini-production php.ini \
&& sed -i 's/display_errors\s*=.*/display_errors = Off/' php.ini \
&& sed -i 's/error_reporting\s*=.*/error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED/' php.ini \
&& sed -i 's/;error_log\s*=\s*php_errors\.log/error_log = \/var\/log\/php_errors.log/' php.ini \
&& sed -i 's/;date\.timezone\s*=.*/date.timezone = Asia\/Shanghai/' php.ini
# package delete
RUN rm -rf /packages
# source delete
RUN docker-php-source delete
9. 总结
今天福哥带着大家使用Dockerfile基于7.4-apache-buster镜像搭建了php7.4的微服务环境了,可以发现使用Dockerfile方式搭建环境我们真的只需要关心我们需要关心的部分,繁琐的编译参数、依赖库、环境参数等等一系列的问题基础镜像都给我们解决好了。
下一课,福哥会带着搭建学习使用Dockerfile搭建python环境,敬请期待~~
https://m.tongfu.net/home/35/blog/513291.html
相关推荐
- 10款超实用JavaScript音频库(js播放音频代码)
-
HTML5提供了一种新的音频标签实现和规范用一个简单的HTML对象而无需音频插件来控制音频。这只是一个简单的整合这些新的HTML5音频特征及使用JavaScript来创建各种播放控制。下面将介绍10款...
- PROFINET转Modbus网关——工业协议融合的智能枢纽
-
三格电子SG-PNh750-MOD-221,无缝连接Profinet与Modbus,赋能工业物联产品概述...
- 简单实用的Modbus类库,支持从站和DTU
-
一、简介...
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
-
从S7-200SMARTV2.5版本开始,S7-200SMART开始支持做PROFINETIO通信的智能设备。从而,两个S7-200SMART之间可以进行PROFINETI...
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
-
Modbus是一种广泛使用的工业自动化通信协议,它支持设备之间的数据交换。Modbus协议有两个主要的变体:ModbusRTU(二进制模式)和ModbusTCP(基于TCP/IP网络的模式)。尽管...
- Modbus通信调试步骤详解(modbus调试工具怎么用)
-
Modbus通信调试步骤详解 Modbus通信分为串口和以太网,无论是串口还是以太网,只要是标准Modbus,就可以用Modbus模拟器进行调试。按以下几步进行调试。...
- 理解Intel手册汇编指令(intel 汇编指令手册)
-
指令格式...
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
-
S7-200SMART集成的RS485端口(端口0)以及SBCM01RS485/232信号板(端口1)两个通信端口可以同时做MODBUSRTU主站,或者一个做MODBUSRTU主站一个做MO...
- InfiniBand网络运维全指南:从驱动安装到故障排查
-
一、InfiniBand网络概述InfiniBand(直译为“无限带宽”技术,缩写为IB)是一种用于高性能计算的计算机网络通信标准,具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。它...
- 一加回归 OPPO,背后的秘密不可告人
-
有这样一个手机品牌,它诞生于互联网品牌。在大众群体看来,它的身世似乎模糊不清,许多人以为它是国外品牌。它的产品定位是极客群体,深受国内发烧友,甚至国外极客玩家喜爱。...
- [西门子PLC] S7-200SMART快速高效的完成Modbus通信程序的设计
-
一、导读Modbus通信是一种被广泛应用的通信协议,在变频器、智能仪表还有其他一些智能设备上都能见到它的身影。本文呢,就把S7-200SMART系列PLC当作Modbus主站,把...
- 狂肝10个月手搓GPU,他们在我的世界中玩起我的世界,梦想成真
-
梦晨衡宇萧箫发自凹非寺量子位|公众号QbitAI自从有人在《我的世界》里用红石电路造出CPU,就流传着一个梗:...
- [西门子PLC] 博途TIA portal SCL编程基础入门:1-点动与自锁
-
一、S7-SCL编程语言简介...
- 工作原理系列之:Modbus(modbus工作过程)
-
MODBUS是一种在自动化工业中广泛应用的高速串行通信协议。该协议是由Modion公司(现在由施耐德电气公司获得)于1979年为自己的可编程逻辑控制器开发的。该协议充当了PLCS和智能自动化设备之间的...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
MacOS + AList + 访达,让各种云盘挂载到本地(建议收藏)
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
- 最近发表
-
- 10款超实用JavaScript音频库(js播放音频代码)
- Howler.js,一款神奇的 JavaScript 开源网络音频工具库
- PROFINET转Modbus网关——工业协议融合的智能枢纽
- 简单实用的Modbus类库,支持从站和DTU
- [西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备
- Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)
- Modbus通信调试步骤详解(modbus调试工具怎么用)
- 理解Intel手册汇编指令(intel 汇编指令手册)
- 「西门子PLC」S7-200 SMART的Modbus RTU通讯
- InfiniBand网络运维全指南:从驱动安装到故障排查
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)