我最近啟動了一個項目,要求我將Microsoft SQL Server數(shù)據(jù)庫與Laravel 5.5應(yīng)用程序連接起來,所以我想我會記錄如何安裝pdo_sqlsrv模塊并在Docker中安裝PHP的Microsoft驅(qū)動程序。
安裝驅(qū)動程序后,您可以輕松配置Laravel以使用Microsoft SQL Server連接:
DB_CONNECTION=sqlsrv
我在大多數(shù)PHP項目中都使用Docker - 我將在下周發(fā)布一本關(guān)于使用Docker和PHP的書 - 所以我想我會告訴你使用PDO驅(qū)動程序獲得SQL服務(wù)器連接的方法。
這是Dockerfile安裝perquisites和pdo_sqlsrvPECL模塊所需的:
FROM php:7.1-apache
ENV ACCEPT_EULA=Y
# Microsoft SQL Server Prerequisites
RUN apt-get update \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/9/prod.list \> /etc/apt/sources.list.d/mssql-release.list\
&& apt-get install -y --no-install-recommends \locales \apt-transport-https \
&&echo"en_US.UTF-8 UTF-8"> /etc/locale.gen \
&& locale-gen \
&& apt-get update \
&& apt-get -y --no-install-recommends install \unixodbc-dev \msodbcsql17
RUN docker-php-ext-install mbstring pdo pdo_mysql \
&& pecl install sqlsrv pdo_sqlsrv xdebug \
&& docker-php-ext-enable sqlsrv pdo_sqlsrv xdebug
COPY index.php /var/www/html/
我在使用Debian Stretch和PHP 7.2安裝必要的軟件包時遇到了困難,因此我使用官方的PHP 7.1 Docker鏡像作為我在撰寫本文時延伸的基本圖像。
我正在演示apache版本,因此很容易提供index.php文件來驗證安裝。在我的大多數(shù)項目中,我使用Caddy或Nginx作為Web服務(wù)器,但Apache也是一個很好的選擇!
第一個RUN指令安裝成功安裝msodbcsql17和unixodbc-dev包所需的包:
# Microsoft SQL Server Prerequisites
RUN apt-get update \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/9/prod.list \> /etc/apt/sources.list.d/mssql-release.list\
&& apt-get install -y --no-install-recommends \locales \apt-transport-https \
&&echo"en_US.UTF-8 UTF-8"> /etc/locale.gen \
&& locale-gen \
&& apt-get update \
&& apt-get -y --no-install-recommends install \
? ? ? ? ? ? ? unixodbc-dev \
? ? ? ? ? ? ? msodbcsql17
這些軟件包是為SQL Server的PDO驅(qū)動程序安裝PECL模塊所必需的。您可以在Microsoft / msphpsql?GitHub項目自述文件中找到各種平臺的安裝說明。
同樣重要的是要注意我們設(shè)置運行時所需的ACCEPT_EULA環(huán)境變量。它表示您在安裝軟件包時已接受最終用戶許可協(xié)議。Yapt-get install msodbcsql
下一個RUN指令使用官方PHP映像的docker-php-ext-install腳本安裝PHP擴(kuò)展。在這種情況下,我安裝Laravel前提mbstring沿pdo,并且pdo_mysql:
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
libxml2-dev \
&& docker-php-ext-install mbstring pdo pdo_mysql soap \
&& pecl install sqlsrv pdo_sqlsrv xdebug \
&& docker-php-ext-enable sqlsrv pdo_sqlsrv xdebug
最后,這個RUN指令最重要的部分,我們pecl用來安裝sqlsrv和pdo_sqlsrv模塊,然后使用docker-php-ext-enable它們來啟用它們。我也在安裝Xdebug,因為我通常在大多數(shù)圖像中安裝它以進(jìn)行開發(fā)。
構(gòu)建和運行容器
最后Dockerfile一條指令是COPY指令,它復(fù)制一個index.php我們現(xiàn)在將從命令行創(chuàng)建的簡單文件:
$echo"<?php phpinfo();"> index.php
當(dāng)我們構(gòu)建映像時,Dockerfile會將index.php文件復(fù)制到Apache將要查找的位置,我們可以驗證SQL Server驅(qū)動程序是否已安裝并使用PHP。
您可以使用docker build命令構(gòu)建映像以快速嘗試:
$ docker build --pull -t sqlserver-demo .
圖像將需要幾分鐘,具體取決于您的連接速度。構(gòu)建完成后,您可以從命令行運行它:
$ docker run --rm -p 8080:80 sqlserver-demo
該docker run命令運行容器,并在-p 8080:80標(biāo)志的幫助下,我們已映射8080到正在偵聽端口的容器80。--rm一旦退出,該標(biāo)志將移除容器。
容器運行后,您應(yīng)該在控制臺中看到一些Apache日志,并且您可以在瀏覽器中訪問http:// localhost:8080以驗證是否已啟用SQL Server模塊:
您現(xiàn)在應(yīng)該能夠連接到PHP 7.1應(yīng)用程序中的SQL Server數(shù)據(jù)庫!我保持這個例子很簡單,只關(guān)注安裝SQL Server PDO驅(qū)動程序所需的步驟,但我希望你能看到Docker如何幫助減輕從PHP應(yīng)用程序連接到Microsoft SQL數(shù)據(jù)庫的麻煩。