溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker 中怎么安裝php擴(kuò)展

發(fā)布時(shí)間:2021-08-03 15:00:16 來源:億速云 閱讀:222 作者:Leah 欄目:編程語言

Docker 中怎么安裝php擴(kuò)展,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

Docker 中的PHP容器安裝擴(kuò)展的方式有

  1. 通過pecl方式安裝

  2. 通過php 容器中自帶的幾個(gè)特殊命令來安裝,這些特殊命令可以在Dockerfile中的RUN命令中進(jìn)行使用。

這里,我們主要討論的是第二種方案,如何通過PHP容器中的幾個(gè)特殊命令來安裝PHP擴(kuò)展

PHP中安裝擴(kuò)展有幾個(gè)特殊的命令

  • docker-php-source

  • docker-php-ext-install

  • docker-php-ext-enable

  • docker-php-ext-configure

演示這三個(gè)命令的作用

都是在PHP容器中進(jìn)行演示的,PHP容器啟動(dòng)太簡單,不作過多介紹

docker-php-source

此命令,實(shí)際上就是在PHP容器中創(chuàng)建一個(gè)/usr/src/php的目錄,里面放了一些自帶的文件而已。我們就把它當(dāng)作一個(gè)從互聯(lián)網(wǎng)中下載下來的PHP擴(kuò)展源碼的存放目錄即可。事實(shí)上,所有PHP擴(kuò)展源碼擴(kuò)展存放的路徑: /usr/src/php/ext 里面。

格式

docker-php-source extract | delete

參數(shù)說明
* extract : 創(chuàng)建并初始化 /usr/src/php目錄
* delete : 刪除 /usr/src/php目錄

案例

root@803cbcf702a4:/usr/src# ls -l
total 11896 #此時(shí),并沒有php目錄
-rw-r--r-- 1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r-- 1 root root      801 Jun 28 03:23 php.tar.xz.asc

root@803cbcf702a4:/usr/src# docker-php-source extract
root@803cbcf702a4:/usr/src# ls -l
total 11900 #此時(shí),生產(chǎn)了php目錄,里面還有一些文件,由于篇幅問題,就不進(jìn)去查看了
drwxr-xr-x 14 root root     4096 Aug  9 09:01 php
-rw-r--r--  1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r--  1 root root      801 Jun 28 03:23 php.tar.xz.asc

root@803cbcf702a4:/usr/src# docker-php-source delete
root@803cbcf702a4:/usr/src# ls -l
total 11896 #此時(shí),將已創(chuàng)建 php 目錄給刪除了
-rw-r--r-- 1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r-- 1 root root      801 Jun 28 03:23 php.tar.xz.asc

root@803cbcf702a4:/usr/src#

docker-php-ext-enable

這個(gè)命令,就是用來啟動(dòng) PHP擴(kuò)展 的。我們使用pecl安裝PHP擴(kuò)展的時(shí)候,默認(rèn)是沒有啟動(dòng)這個(gè)擴(kuò)展的,如果想要使用這個(gè)擴(kuò)展必須要在php.ini這個(gè)配置文件中去配置一下才能使用這個(gè)PHP擴(kuò)展。而 docker-php-ext-enable 這個(gè)命令則是自動(dòng)給我們來啟動(dòng)PHP擴(kuò)展的,不需要你去php.ini這個(gè)配置文件中去配置。
案例

# 查看現(xiàn)有可以啟動(dòng)的擴(kuò)展root@517b9c67507a:/usr/local/etc/php# ls /usr/local/lib/php/extensions/no-debug-non-zts-20170718/opcache.so  redis.so  sodium.soroot@517b9c67507a:/usr/local/etc/php## 查看redis 擴(kuò)展是否可以啟動(dòng)root@517b9c67507a:/usr/local/etc/php# php -m | grep redisroot@517b9c67507a:/usr/local/etc/php## 啟動(dòng) redis 擴(kuò)展root@517b9c67507a:/usr/local/etc/php# docker-php-ext-enable redis# 啟動(dòng) 成功root@517b9c67507a:/usr/local/etc/php# php -m | grep redisredisroot@517b9c67507a:/usr/local/etc/php##說明,php容器中默認(rèn)是沒有php.ini配置文件的,加載原理如下所示root@517b9c67507a:/usr/local/etc/php# php -i | grep -A 5 php.iniConfiguration File (php.ini) Path => /usr/local/etc/phpLoaded Configuration File => (none)# 核心是 /usr/local/etc/php/conf.d 目錄下的擴(kuò)展配置文件Scan this dir for additional .ini files => /usr/local/etc/php/conf.dAdditional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-redis.ini,/usr/local/etc/php/conf.d/docker-php-ext-sodium.iniroot@517b9c67507a:/usr/local/etc/php#

docker-php-ext-install

這個(gè)命令,是用來安裝并啟動(dòng)PHP擴(kuò)展的。
命令格式:
docker-php-ext-install “源碼包目錄名”

注意點(diǎn):

  • “源碼包“需要放在 /usr/src/php/ext 下

  • 默認(rèn)情況下,PHP容器沒有 /usr/src/php這個(gè)目錄,需要使用 docker-php-source extract來生成。

  • docker-php-ext-install 安裝的擴(kuò)展在安裝完成后,會(huì)自動(dòng)調(diào)用docker-php-ext-enable來啟動(dòng)安裝的擴(kuò)展。

  • 卸載擴(kuò)展,直接刪除/usr/local/etc/php/conf.d 對(duì)應(yīng)的配置文件即可。

案例

# 卸載redis 擴(kuò)展root@803cbcf702a4:/usr/local# rm -rf /usr/local/etc/php/conf.d/docker-php-ext-redis.iniroot@803cbcf702a4:/usr/local# php -m 
[PHP Modules]CorectypecurldatedomfileinfofilterftphashiconvjsonlibxmlmbstringmysqlndopensslpcrePDOpdo_sqlitePharposixreadlineReflectionsessionSimpleXMLsodiumSPLsqlite3standardtokenizerxmlxmlreaderxmlwriterzlib[Zend Modules]root@803cbcf702a4:/usr/local##PHP容器默認(rèn)是沒有redis擴(kuò)展的。所以我們通過docker-php-ext-install安裝redis擴(kuò)展root@803cbcf702a4:/# curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2root@803cbcf702a4:/# cd /tmproot@517b9c67507a:/tmp# tar -xzf reids.tar.gzroot@517b9c67507a:/tmp# lsphpredis-5.0.2  reids.tar.gzroot@517b9c67507a:/tmp# docker-php-source extractroot@517b9c67507a:/tmp# mv phpredis-5.0.2 /usr/src/php/ext/phpredis#檢查移過去的插件源碼包是否存在root@517b9c67507a:/tmp# ls -l /usr/src/php/ext | grep redisdrwxrwxr-x  6 root root 4096 Jul 29 15:04 phpredisroot@517b9c67507a:/tmp# docker-php-ext-install phpredis# 檢查redis 擴(kuò)展是否已經(jīng)安裝上root@517b9c67507a:/tmp# php -m | grep redisredisroot@517b9c67507a:/tmp#

docker-php-ext-configure

docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,當(dāng)你安裝擴(kuò)展的時(shí)候,需要自定義配置時(shí),就可以使用它來幫你做到。

案例

FROM php:7.1-fpm
RUN apt-get update \
    # 相關(guān)依賴必須手動(dòng)安裝
    && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    # 安裝擴(kuò)展
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    # 如果安裝的擴(kuò)展需要自定義配置時(shí)
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

看完上述內(nèi)容,你們掌握Docker 中怎么安裝php擴(kuò)展的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI