1. 程式人生 > >遷移使用pdo_oci連線oracle的php應用到kubernetes實踐_Kubernetes中文社群

遷移使用pdo_oci連線oracle的php應用到kubernetes實踐_Kubernetes中文社群

一、建立映象

傳統上php應用會放到物理伺服器上,伺服器有的會使用linux系統,也有的會使用windows系統。如果我們想把php應用遷移到kubernetes上,最重要的就是建立php應用的映象。在映象中我們需要配置php的擴充套件,包括oci8和pdo_oci。

我們使用php官方提供的基礎映象,在官方映象中配置了apache和php的基礎應用環境,php的擴充套件需要自己安裝。

由於眾所周知的原因,國內連結國外官方的源不是很穩定所以筆者將源換成了163的源,大家也可以換成國內其他的源,比如阿里的源。

php的基礎映象沒有安裝太多的軟體,為了安裝oci8和pdo_oci我們需要自己安裝一些軟體。

安裝oci8和pdo_oci之前我們還需要安裝oracle的客戶端,筆者使用的是oracle11g,需要提前下載或者建立映象時下載,大家實際配置的時候安裝對應的客戶端就可以。然後我們還需要配置環境變數,配置完環境變數就可以使用php官方提供的方法安裝oci8和pdo_oci。最後我們將php應用的原始碼放置到/var/www/html/中,映象就配置完成了。

Dockerfile檔案如下:

FROM php:5.6.36-apache
#設定源
RUN rm -rf /etc/apt/sources.list && \
echo “deb http://mirrors.163.com/debian/ stretch main non-free contrib” >/etc/apt/sources.list && \
echo “deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib” >>/etc/apt/sources.list && \
echo “deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib” >>/etc/apt/sources.list && \
echo “deb-src http://mirrors.163.com/debian/ stretch main non-free contrib” >>/etc/apt/sources.list && \
echo “deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib” >>/etc/apt/sources.list && \
echo “deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib” >>/etc/apt/sources.list && \
echo “deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib” >>/etc/apt/sources.list && \
echo “deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib” >>/etc/apt/sources.list

RUN apt-get update \
&& apt-get install -y unzip libaio-dev –no-install-recommends \
&& rm -r /var/lib/apt/lists/*

#安裝客戶端
ADD instantclient-basic-linux.x64-11.2.0.4.0.zip /tmp
ADD instantclient-sdk-linux.x64-11.2.0.4.0.zip /tmp
ADD instantclient-sqlplus-linux.x64-11.2.0.4.0.zip /tmp

RUN unzip /tmp/instantclient-basic-linux.x64-11.2.0.4.0.zip -d /usr/local/ \
&& unzip /tmp/instantclient-sdk-linux.x64-11.2.0.4.0.zip -d /usr/local/ \
&& unzip /tmp/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip -d /usr/local/ \
&& ln -s /usr/local/instantclient_11_2/libclntsh.so.11.1 /usr/local/instantclient_11_2/libclntsh.so \
&& ln -s /usr/local/instantclient_11_2/libocci.so.11.1 /usr/local/instantclient_11_2/libocci.so \
&& ln -s /usr/local/instantclient_11_2/sqlplus /usr/bin/sqlplus \
&& rm -rf /usr/local/*.zip

#設定變數
ENV LD_LIBRARY_PATH /usr/local/instantclient_11_2
ENV TNS_ADMIN /usr/local/instantclient_11_2
ENV ORACLE_BASE /usr/local/instantclient_11_2
ENV ORACLE_HOME /usr/local/instantclient_11_2

#安裝擴充套件
RUN docker-php-ext-configure pdo_oci –with-pdo-oci=instantclient,/usr/local/instantclient_11_2,11.2 \
&& echo ‘instantclient,/usr/local/instantclient_11_2/’ | pecl install oci8-2.0.12 \
&& docker-php-ext-install pdo_oci \
&& docker-php-ext-enable oci8

ADD . /var/www/html/

我們將Dockerfile檔案放到原始碼的根目錄下,執行建立映象命令就可以建立映象檔案了。

二、遷移應用到kubernetes

按照正常方法建立kubernetes的Deployment和Service就可以,注意基礎映象的開放埠是80,所以Deployment的containerPort需要設定為80。

題外話

傳統上php應用會通過配置ip的方式訪問外部資料庫,在kubernetes中也可以採用這種方式。Kubernetes還可以使用endpoint的方式對映外部服務,我們可以先建立endpoint對映外部oracle的服務,然後通過配置endpoint服務名的方式訪問外部資料庫。

我們也可以按照在linux物理機上安裝oci8和pdo_oci的方法安裝映象,這也是可以行的通的,但是筆者建議還是按照php官方提供的方法安裝oci8和pdo_oci,因為官方提供的方法可以保證安裝後鏡像大小足夠小。

參考資料

作者簡介:
王善鵬,北京神舟航天軟體技術有限公司軟體開發工程師。本文版權歸原作者所有。