Dockerfile的内容
FROM php:7.3-apache MAINTAINER via-chen<939050039@qq.com> RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y --no-install-recommends \ vim \ curl \ libz-dev \ libpq-dev \ libjpeg-dev \ libpng-dev \ libfreetype6-dev \ libssl-dev \ libmcrypt-dev \ zip \ unzip \ build-essential \ libaio1 \ libzip-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && rm /var/log/lastlog /var/log/faillog ADD instantclient-basic-linux.x64-21.4.0.0.0dbru.zip /usr/lib/oracle/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip ADD instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip /usr/lib/oracle/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip RUN unzip /usr/lib/oracle/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip -d /usr/lib/oracle/ \ && rm /usr/lib/oracle/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip \ && unzip /usr/lib/oracle/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip -d /usr/lib/oracle/ \ && rm /usr/lib/oracle/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip \ && echo /usr/lib/oracle/instantclient_21_4 > /etc/ld.so.conf.d/oracle-instantclient.conf \ && ldconfig ENV LD_LIBRARY_PATH /usr/lib/oracle/instantclient_21_4 ENV ORACLE_HOME /usr/lib/oracle/instantclient_21_4 RUN docker-php-ext-install zip pdo_mysql bcmath opcache pcntl mysqli \ && docker-php-ext-configure oci8 --with-oci8=instantclient,/usr/lib/oracle/instantclient_21_4 \ && docker-php-ext-install -j$(nproc) oci8 \ && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/lib/oracle/instantclient_21_4 \ && docker-php-ext-install -j$(nproc) pdo_oci \ && docker-php-ext-configure gd \ --with-jpeg-dir=/usr/lib \ --with-freetype-dir=/usr/include/freetype2 && \ docker-php-ext-install gd \ && pecl install mcrypt && docker-php-ext-enable mcrypt RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
操作步骤
- 构建镜像 docker build -f php73-apache.txt -t php73apache:1.0 .
- 运行容器 docker run -d -p 8099:80 -v /home/ikugui-docker/nginx/www:/var/www/html --name php73apacheServer php73apache:1.0
-
进入容器修改apache2配置:
【dockerfile中已启用可以不用了】启用rewrite模块 ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
修改apache.conf 中 AllowOverride None修改成AllowOverride all,最后记得重启容器! - 进入到默认配置的虚拟机配置文件目录 /etc/apache2/sites-enabled 下修改 000-default.conf文件中的项目根目录指定到public文件【laravel的入口在public】,最后记得重启容器!
-
若需要在docker容器的php中直接加载已编译的.so扩展时,进入容器找到PHP的扩展目录(默认在/usr/local/lib/php/extensions/no-debug-non-zts-20190902),将.so文件直接复制进去,然后再进入docker-php-ext-enable的目录(默认在/usr/local/bin),执行 ./docker-php-ext-enable 扩展名 ,php -m 即可查看是否加载成功,最后记得重启容器!
(例:将php_tet.so复制到/usr/local/lib/php/extensions/no-debug-non-zts-20190902/tet.so,然后进入/usr/local/bin文件执行./docker-php-ext-enable tet,php -m 查看tet是否加载,加载成功则重启容器phpinfo()就能看到tet扩展)
爬坑纪实:
- 使用Dockerfile安装php时 记得指定:
RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y libmcrypt-dev RUN docker-php-ext-install mcrypt
这是因为我们代码里面使用的mcrypt_module_open() 需要安装mcrypt扩展库【aes加解密使用的!】否则会报错!
先安装libmcrypt-dev扩展库再配置安装PHP的mcrypt扩展 - 指定apache2开启rewrite模块:
先配置加载模块 ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
然后去修改apache2.conf里面把 AllowOverride None 修改成 AllowOverride all - 启动php-apache的镜像命令:
docker run -d -p 8099:80 -v /home/ikugui-docker/nginx/www:/var/www/html --name php73apacheServer php73apache:1.0 - apache2查看模块信息(apache2 -M)报错 Config variable ${APACHE_RUN_DIR} is not defined:
这是由于升级后apache 配置文件变化,没有导入新的apache 环境变量,运行:source /etc/apache2/envvars