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