前面福哥已经教给大家利用Dockerfile制作自己的镜像的方法了,本日我们利用Dockerfile制作一个PHP7+Apache的运行环境的镜像,用来支配PHP运用程序和做事。
福哥选择的根本镜像是php:7.4-apache-buster,这个镜像可以从官方拉取。
1.2 环境

镜像版本
php:7.4-apache-buster
操作系统
CentOS 7 x86_64 2009
做事器
TFCentOS7x64
IP
192.168.168.68
端口
80
2. 安装2.1 Dockerfile
2.1.1 根本镜像
福哥选择的是php:7.4-apache-buster这个根本镜像,由于这个镜像包含了apache做事,我们可以直接拿来用。
https://hub.docker.com/_/php/tags?page=1&name=7.4-apache-buster
目前hub.docker.com该当已经无法打开了!
大家直接docker pull就可以了!
拉取镜像php:7.4-apache-buster,添加到registry.tongfu.net:5000私有仓库里面。
dockerpullphp:7.4-apache-busterdockertagphp:7.4-apache-busterregistry.tongfu.net:5000/php:7.4-apache-busterdockerrmiphp:7.4-apache-busterdockerimages|grepphp
2.1.2 创建镜像目录
创建镜像目录php7.4apache并切换到php7.4apache目录下面。
mkdir/tongfu.net/data/dockerfile/tfphp7.4apachecd/tongfu.net/data/dockerfile/tfphp7.4apache
2.1.3 依赖镜像
第一行写上依赖镜像php:7.4-apache-buster。
FROMregistry.tongfu.net:5000/php:7.4-apache-buster
2.1.4 掩护者信息
这是福哥写的掩护者信息。
#forMAINTAINERMAINTAINERAuthor:AndyBogateMAINTAINEREmail:tongfu@tongfu.netMAINTAINERHomepage:https://tongfu.netMAINTAINERDatetime:2023/03/08MAINTAINERVersion:v1.0
2.1.5 暴露端口
供应做事的端口常日情形下是80和443,我们把它们暴露出来。
#forEXPOSEEXPOSE80443
2.1.6 主目录
福哥设置镜像的主目录是/tongfu.net/web。
#forWORKDIRWORKDIR/tongfu.net/web
2.1.7 设置时区
默认时区是UTC,我们把它改成CST,也便是中国标准韶光。
#fortimezoneRUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime\&&echo"Asia/Shanghai">/etc/timezone
2.1.8 安装工具和依赖库
后面的制作过程须要用到wget工具,这个须要通过apt-get安装一下。除此之外还要安装一些依赖库,包括图形库、zip和xml等等。
#installwgetRUNapt-getupdate\&&apt-get-yinstallwgetvimRUNapt-get-yinstalllibwebp-devlibjpeg-devlibpng-devlibfreetype6-devRUNapt-get-yinstalllibzip-devRUNapt-get-yinstalllibc-client-devlibkrb5-devRUNapt-get-yinstalllibxml2-dev
2.1.9 开释PHP源码
这个php:7.4-apache-buster包含了PHP的源码,由于后面须要利用PHP源码安装PHP扩展,以是先要开释PHP源码。
#extractPHPsourceRUNdocker-php-sourceextract
2.1.10 GD图形库扩展
GD图形库可以让我们通过PHP直接加工各种图片文件,这个库可以用来实现图片验证码、照片加工等等功能的。
#gdextensionRUNdocker-php-ext-configuregd\--with-jpeg=/usr/include\--with-freetype=/usr/include/\&&docker-php-ext-installgd\&&docker-php-ext-enablegd
2.1.11 MySQL扩展
福哥是利用PDO来连接MySQL数据库,而MySQL的PDO库PHP资源包里包含了,只要安装起来就行了。
#extensionofmysqliforMySQLRUNdocker-php-ext-installmysqli\&&docker-php-ext-enablemysqli#extensionofPDOforMySQLRUNdocker-php-ext-installpdo_mysql\&&docker-php-ext-enablepdo_mysql
2.1.12 Memcached扩展
memcached库须要从PECL下载,福哥选择的是3.1.5版本,这里直接通过phpize编译后就可以通过make安装了。
memcached库依赖libmemcached库,福哥选择的是1.0.18版本,只管即便不要改避免版本冲突~
#libraryofMemcachedRUNwgethttps://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz\&&tar-xzvflibmemcached-1.0.18.tar.gz\&&cdlibmemcached-1.0.18\&&sed-i's/opt_servers\=\=false/\!opt_servers/g'clients/memflush.cc\&&./configure\&&make&&makeinstall\&&cd../\&&rm-flibmemcached-1.0.18.tar.gz\&&rm-rflibmemcached-1.0.18#extensionofMemcachedRUNwgethttp://pecl.php.net/get/memcached-3.1.5.tgz\&&tar-xzvfmemcached-3.1.5.tgz\&&cdmemcached-3.1.5\&&/usr/local/bin/phpize\&&./configure--with-php-config=/usr/local/bin/php-config\--disable-memcached-sasl\&&make&&makeinstall\&&cd../\&&rm-fmemcached-3.1.5.tgz\&&rm-rfmemcached-3.1.5\&&docker-php-ext-enablememcached
2.1.13 Redis扩展
redis库须要从PECL下载,福哥选择的是4.1.0版本,这里直接通过phpize编译后就可以通过make安装了。
#extensionofRedisRUNwgethttp://pecl.php.net/get/redis-4.1.0.tgz\&&tar-xzvfredis-4.1.0.tgz\&&cdredis-4.1.0\&&/usr/local/bin/phpize\&&./configure--with-php-config=/usr/local/bin/php-config\&&make&&makeinstall\&&cd../\&&rm-fredis-4.1.0.tgz\&&rm-rfredis-4.1.0\&&docker-php-ext-enableredis
2.1.14 MongoDB扩展
MongoDB库须要从PECL下载,福哥选择的是1.7.4版本,这里直接通过phpize编译后就可以通过make安装了。
#extensionofMongoDBRUNwgethttp://pecl.php.net/get/mongodb-1.7.4.tgz\&&tar-xzvfmongodb-1.7.4.tgz\&&cdmongodb-1.7.4\&&/usr/local/bin/phpize\&&./configure--with-php-config=/usr/local/bin/php-config\&&make&&makeinstall\&&cd../\&&rm-fmongodb-1.7.4.tgz\&&rm-rfmongodb-1.7.4\&&docker-php-ext-enablemongodb
2.1.15 其他扩展
除了前面安装的几个扩展之外,福哥还安装了imap、zlib、soap、bcmath这些扩展,建议大家也把这些安装上。
#imapextensionRUNdocker-php-ext-configureimap\--with-kerberos\--with-imap-ssl\&&docker-php-ext-installimap\&&docker-php-ext-enableimap#zlibextensionRUNmv/usr/src/php/ext/zlib/config0.m4/usr/src/php/ext/zlib/config.m4\&&docker-php-ext-installzlib\&&docker-php-ext-enablezlib#soapextensionRUNdocker-php-ext-installsoap\&&docker-php-ext-enablesoap#bcmathextensionRUNdocker-php-ext-installbcmath\&&docker-php-ext-enablebcmath
2.1.16 清理PHP源码
现在PHP的扩展都按照好了,已经不须要源码了,清理掉吧。
#sourcedeleteRUNdocker-php-sourcedelete
2.2 php配置文件
2.2.1 php.ini
php.ini的存放目录是/usr/local/etc/php/,镜像供应了php-ini-development、php.ini-production两个配置文件模板,我们可以根据利用场景选择开拓版本还是生产版本。
启动临时容器,从容器里复制php.ini-development出来放到镜像目录下。
dockerrun-tid--namettt-htttregistry.tongfu.net:5000/php:7.4-apache-busterdockercpttt:/usr/local/etc/php/php.ini-developmentphp.inidockerrm-fttt
设置缺点日志路径,将PHP的实行缺点存起来。
error_log=/tmp/php_errors.log
修正php.ini设置时区为Asia/Shanghai。
date.timezone=Asia/Shanghai
复制php.ini覆盖镜像里面的php.ini配置文件。
#php.iniCOPYphp.ini/usr/local/etc/php/php.ini
2.3 apache配置文件
2.3.1 模块配置
镜像安装的apache2包括/etc/apache2/mods-available和/etc/apache2/mods-enabled两个模块配置目录,mods-available里面包含全部的可用模块配置文件,mods-enabled里面是启用的模块配置文件。
要启用模块就从mods-available选择模块配置文件建立符号链接到mods-enabled下面。
要停用模块就将mods-enabled下面的模块配置文件的符号链接删除掉。
福哥这里把rewrite.load模块给打开了,这个利用场景还是非常多的,最最少实现PHP的伪静态就须要它。
#apachemodulesRUNcd/etc/apache2/mods-enabled/\&&ln-s../mods-available/rewrite.load
2.3.2 站点配置
镜像安装的apache2包括/etc/apache2/sites-available和/etc/apache2/sites-enabled两个站点配置目录,sites-available里面包含全部的可用站点配置文件,sites-enabled里面是启用的站点配置文件。
要启用站点就从sites-available选择站点配置文件建立符号链接到sites-enabled下面。
要停用站点就将sites-enabled下面删除站点配置文件的符号链接。
启动临时容器,从容器里复制000-default.conf出来放到镜像目录下。
dockerrun-tid--namettt-htttregistry.tongfu.net:5000/php:7.4-apache-busterdockercpttt:/etc/apache2/sites-available/000-default.conf000-default.confdockerrm-fttt
福哥在默认站点的虚拟主机里面利用rewrite模块实现了一个PHP的伪静态重定向配置,可以将各种html要求转交给htmlRouteMap.php处理。
在000-default.conf的VirtualHost节点里面添加如下配置信息。
#ForroutestaticrequestsRewriteEngineOnRewriteRule(.)\.html/htmlRouteMap.php?tfphp_static_name=$1[L]
复制000-default.conf覆盖镜像里面的000-default.conf配置文件。
#apachesitesCOPY000-default.conf/etc/apache2/sites-available/000-default.conf
2.4 创建镜像
利用下面的命令创建tfphp:7.4-apache-1.0.0镜像。
dockerbuild-fDockerfile\-tregistry.tongfu.net:5000/tfphp:7.4-apache-1.0.0./
2.5 查看镜像
看看新的镜像。
dockerimages|greptfphp
3.1 宿主机程序目录
在宿主机建立一个用来存放php程序的目录,它将被映射到容器的apache主目录上面。
mkdir-p/tongfu.net/data/docker/data/tfphp/html/cd/tongfu.net/data/docker/data/tfphp/html/
3.2 宿主机程序文件
在刚刚建立的目录下面建立一个php程序文件index.php,写入下面的代码。
<?phpphpinfo();
再建立一个php程序文件htmlRouteMap.php,写入下面的代码。
<?phpvar_dump(date("Y-m-dH:i:s"),$_GET['tfphp_static_name'].".html");
3.3 启动容器
利用下面的命令基于tfphp:7.4-apache-1.0.0镜像启动一个容器,将80端口和443端口映射到宿主机上面,将/var/www/html这个apache主目录映射到前面建立的目录上面。
dockerrun-tid\--nametfphp\-htfphp\-p80:80\-p443:443\-v/tongfu.net/data/docker/data/tfphp/html:/var/www/html\registry.tongfu.net:5000/tfphp:7.4-apache-1.0.0
3.4 浏览器访问
打开浏览器访问http://192.168.168.68/index.php,可以看到PHP系统信息。
输入网址http://192.168.168.68/tongfu.net/docker/tfphp.html,可以看到要求html资源路径被htmlRouteMap.php打印出来了。
4. 总结
本日福哥在TFCentOS7x64做事器上面通过Dockerfile创建了一个镜像tfphp:7.4-apache-1.0.0,并且通过这个新创建的镜像tfphp:7.4-apache-1.0.0启动了一个容器,这个镜像用来运行基于PHP措辞开拓的运用程序。
后面福哥会在这个镜像tfphp:7.4-apache-1.0.0根本之上进行二次扩展制作新的镜像,然后根据镜像的用场针对apache和php进行自定义的配置,敬请期待~
https://m.tongfu.net/home/35/blog/513977.html