linux中使用docker安装配置php7.3环境


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

操作步骤

  1. 构建镜像 docker build -f php73-apache.txt -t php73apache:1.0 .
  2. 运行容器 docker run -d -p 8099:80 -v /home/ikugui-docker/nginx/www:/var/www/html --name php73apacheServer php73apache:1.0
  3. 进入容器修改apache2配置:
    【dockerfile中已启用可以不用了】启用rewrite模块 ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
    修改apache.conf 中 AllowOverride None修改成AllowOverride all,最后记得重启容器!

  4. 进入到默认配置的虚拟机配置文件目录 /etc/apache2/sites-enabled 下修改 000-default.conf文件中的项目根目录指定到public文件【laravel的入口在public】,最后记得重启容器!
  5. 若需要在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扩展)

爬坑纪实:

 

    1. 使用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扩展

    2. 指定apache2开启rewrite模块:
      先配置加载模块 ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
      然后去修改apache2.conf里面把 AllowOverride None 修改成 AllowOverride all
    3. 启动php-apache的镜像命令:
      docker run -d -p 8099:80 -v /home/ikugui-docker/nginx/www:/var/www/html --name php73apacheServer php73apache:1.0
    4. apache2查看模块信息(apache2 -M)报错 Config variable ${APACHE_RUN_DIR} is not defined:
      这是由于升级后apache 配置文件变化,没有导入新的apache 环境变量,运行:source /etc/apache2/envvars

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM