教你如何做出想要的 PHPDocker 映象

KevinYan發表於2019-10-11

之前有篇文章講過如何通過Docker來構建Laravel的開發環境,其實變通一下就能夠在本地電腦上用Docker執行任何PHP專案,讓任何PHP專案都能執行在Docker環境中主要是需要根據PHP專案的依賴製作PHP映象的Dockerfile。這篇文章就主要講一下如何根據需求製作PHP的Docker映象檔案。

1. 繼承基礎映象

首先需要根據你的PHP專案對PHP的要求找到基礎映象,然後再在基礎映象的基礎上按需安裝PHP的擴充套件。在Dockerfile中使用FROM命令指定基礎映象。

From <image>
  • FROM 指定構建映象的基礎源映象,如果本地沒有指定的映象,則會自動從 Docker 的公共庫 pull 映象下來。
  • FROM 必須是 Dockerfile 中非註釋行的第一個指令,即一個 Dockerfile 從 FROM 語句開始。

這裡我們打算製作一個PHP7.2的包括FPM的定製化映象,所以首先在Dockerfile中指定基礎映象:

FROM php:7.2-fpm

2. 安裝PHP擴充套件

定製PHP映象的主要工作就是安裝各種PHP擴充套件,在Dockerfile中PHP映象安裝擴充套件有三種方法,每種方法都有它特定的使用場景,下面依次來說。

2.1安裝dockerhub中php官方提供的擴充套件

在DockerHub中提供了一些官方的PHP擴充套件,可以通過docker-php-ext-install指令碼命令在Dockerfile中列出要安裝的擴充套件,下面讓我們的PHP映象安裝上常用的pdopdo_mysqlmcrypt這些擴充套件。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath

如果你需要對擴充套件指定一些自定義的編譯引數的話,docker提供了另外一個有用的指令碼docker-php-ext-configure來傳遞編譯引數(一般情況下用不到)。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

2.2 使用PECL安裝擴充套件

DockerHub上只是提供了一部分PHP的擴充套件,安裝這些以外的擴充套件仍然需要PECL, 在Docker映象中使用pecl install下載、編譯、安裝擴充套件然後使用docker-php-ext-enable

下面使用PECL安裝了PHPredis還有grpc擴充套件。

RUN pecl install grpc \
     && docker-php-ext-enable grpc \
     && pecl install -o -f redis \
     && docker-php-ext-enable redis \
     && rm -rf /tmp/pear

2.3 原始碼安裝擴充套件

有些擴充套件即無法使用docker-php-ext-install安裝也無法通過PECL安裝,只能通過原始碼編譯安裝(PHP擴充套件型的框架Phalcon就是這樣,不過設定比較複雜,以後再講), 在Docker中同樣能夠通過原始碼安裝PHP擴充套件

RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p /tmp/xcache \
    && tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && docker-php-ext-configure /tmp/xcache --enable-xcache \
    && docker-php-ext-install /tmp/xcache \
    && rm -r /tmp/xcache

講在最後

文章重點講了一下Docker中怎麼安裝PHP的擴充套件,其實還有其他很多與Docker相關的概念需要了解才能製作出自己需要的映象檔案,好在Docker官方教程裡有詳細的講解,感興趣的一定要按照教程的步驟自己實踐一下。

現在服務的業務組織裡服務端開發語言主要用Go,PHP更多的是一些老系統、管理後臺或者活動類系統在用,最近兩個月我寫過的PHP程式碼數都能數過來,更多的時間還是在寫Go程式碼。所以最近寫的關於PHP類的技術文章也很少,之後有時間了會寫如何在Docker裡安裝和配置Phalcon。

公眾號:網管叨bi叨 | Golang、PHP、Laravel、Docker等學習經驗分享

相關文章