在Docker中安裝PHP 7的Microsoft SQL驅(qū)動程序

我最近啟動了一個項目,要求我將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ù)庫的麻煩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容