Docker 中怎么安裝php擴展,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)建站IDC提供業(yè)務:成都服務器托管,成都服務器租用,成都服務器托管,重慶服務器租用等四川省內主機托管與主機租用業(yè)務;數(shù)據(jù)中心含:雙線機房,BGP機房,電信機房,移動機房,聯(lián)通機房。
通過pecl方式安裝
通過php 容器中自帶的幾個特殊命令來安裝,這些特殊命令可以在Dockerfile中的RUN命令中進行使用。
這里,我們主要討論的是第二種方案,如何通過PHP容器中的幾個特殊命令來安裝PHP擴展
docker-php-source
docker-php-ext-install
docker-php-ext-enable
docker-php-ext-configure
都是在PHP容器中進行演示的,PHP容器啟動太簡單,不作過多介紹
此命令,實際上就是在PHP容器中創(chuàng)建一個/usr/src/php的目錄,里面放了一些自帶的文件而已。我們就把它當作一個從互聯(lián)網(wǎng)中下載下來的PHP擴展源碼的存放目錄即可。事實上,所有PHP擴展源碼擴展存放的路徑: /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 #此時,并沒有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 #此時,生產(chǎn)了php目錄,里面還有一些文件,由于篇幅問題,就不進去查看了 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 #此時,將已創(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#
這個命令,就是用來啟動 PHP擴展 的。我們使用pecl安裝PHP擴展的時候,默認是沒有啟動這個擴展的,如果想要使用這個擴展必須要在php.ini這個配置文件中去配置一下才能使用這個PHP擴展。而 docker-php-ext-enable 這個命令則是自動給我們來啟動PHP擴展的,不需要你去php.ini這個配置文件中去配置。
案例
# 查看現(xiàn)有可以啟動的擴展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 擴展是否可以啟動root@517b9c67507a:/usr/local/etc/php# php -m | grep redisroot@517b9c67507a:/usr/local/etc/php## 啟動 redis 擴展root@517b9c67507a:/usr/local/etc/php# docker-php-ext-enable redis# 啟動 成功root@517b9c67507a:/usr/local/etc/php# php -m | grep redisredisroot@517b9c67507a:/usr/local/etc/php##說明,php容器中默認是沒有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 目錄下的擴展配置文件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#
這個命令,是用來安裝并啟動PHP擴展的。
命令格式:
docker-php-ext-install “源碼包目錄名”
注意點:
“源碼包“需要放在 /usr/src/php/ext 下
默認情況下,PHP容器沒有 /usr/src/php這個目錄,需要使用 docker-php-source extract來生成。
docker-php-ext-install 安裝的擴展在安裝完成后,會自動調用docker-php-ext-enable來啟動安裝的擴展。
卸載擴展,直接刪除/usr/local/etc/php/conf.d 對應的配置文件即可。
案例
# 卸載redis 擴展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容器默認是沒有redis擴展的。所以我們通過docker-php-ext-install安裝redis擴展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 擴展是否已經(jīng)安裝上root@517b9c67507a:/tmp# php -m | grep redisredisroot@517b9c67507a:/tmp#
docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,當你安裝擴展的時候,需要自定義配置時,就可以使用它來幫你做到。
案例
FROM php:7.1-fpm RUN apt-get update \ # 相關依賴必須手動安裝 && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ # 安裝擴展 && docker-php-ext-install -j$(nproc) iconv mcrypt \ # 如果安裝的擴展需要自定義配置時 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd
看完上述內容,你們掌握Docker 中怎么安裝php擴展的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!