docker安裝php擴展gd庫


Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux(Windows,MacOS) 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。

一、安裝nginx、php、mysql鏡像

docker pull nginx:latest
docker pull php:5.6-fpm
docker pull php:5.6-cli
docker pull mysql:5.6.46
docker pull phpmyadmin/phpmyadmin

使用命令 docker images 查看本地鏡像:

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
nginx                   latest              c7460dfcab50        5 hours ago         126MB
phpmyadmin/phpmyadmin   latest              fcf3beee74b9        47 hours ago        458MB
mysql                   5.6.46              f7ba8643e01a        12 days ago         302MB
php                     5.6-fpm             3458979c7744        11 months ago       344MB
php                     5.6-cli             36c3c974e6ee        11 months ago       344MB

善用 docker search 命令來查看可用版本。

https://www.runoob.com/docker/docker-search-command.html

二、運行、停止、刪除容器

可以執行命令 docker container ls (或docker ps)或者 docker container ls -all(或docker ps -a),來查看已啟動的容器或者所有容器。

docker run --name xu-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.6.46
docker run --name xu-phpmyadmin -d --link xu-mysql:db -p 8081:80 phpmyadmin/phpmyadmin
# 訪問http://127.0.0.1:8081/,使用root/123456賬號信息登錄管理mysql
docker run --name  xu-php-fpm5.6 -v ~/code/docker/nginx/www:/www  -d php:5.6-fpm

下面Nginx + PHP:

docker run --name xu-nginx -p 8080:80 -d -v ~/code/docker/nginx/www:/usr/share/nginx/html -v ~/code/docker/nginx/conf/conf.d/:/etc/nginx/conf.d --link xu-php-fpm5.6:php nginx

參考:

https://www.runoob.com/docker/docker-install-php.html
https://hub.docker.com/_/php

當把web程序代碼放入 ~/code/docker/nginx/www 后,在瀏覽器打開http://127.0.0.1:8080/,提示:

您的服務器環境不支持gd擴展,將無法使用驗證碼!

容器的停止、刪除,如下:

docker stop 027c0f432aae # 此外對應的容器id
docker rm 027c0f432aae

查看mysql容器的ip地址,連接數據庫時用得上:

docker inspect --format='{{.NetworkSettings.IPAddress}}' xu-mysql

三、安裝php擴展gd庫

如果之前啟用了 gd,需要先在 php.ini 文件中注釋掉 extension=gd.so 並重啟容器。

進入php容器:

docker exec -it <容器ID或容器名稱> /bin/bash

可把軟件源修改為國內某鏡像站源,例如容器軟件源 /etc/apt/sources.list 修改為網易鏡像站源,以stretch為例:

# 先做備份:
mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 再創建編輯 /etc/apt/sources.list
deb http://mirrors.163.com/debian/ stretch main contrib non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main contrib non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main contrib non-free contrib

編輯器推薦安裝 vim,默認沒有安裝,請先執行 apt-get update,再安裝 apt-get install vim,但是往往矛盾的是,我如果能夠快速更新並安裝的話,就用不着換源了,所以使用最基本的命令“echo”:

# 依次執行:

echo "deb http://mirrors.163.com/debian/ stretch main non-free contrib" >/etc/apt/sources.list

echo "deb http://mirrors.163.com/debian/ stretch-proposed-updates main non-free contrib" >>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ stretch main non-free contrib" >>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ stretch-proposed-updates main non-free contrib" >>/etc/apt/sources.list
# 更新軟件源
apt update
# 安裝各種庫
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
# 解壓源碼
docker-php-source extract
# 進入gd源碼文件夾
cd /usr/src/php/ext/gd
# 准備編譯
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
# 編譯安裝 
docker-php-ext-install gd
# 檢查擴展是否安裝成功
php -m | grep gd
# 退出php容器終端
exit
# 重啟php容器
……

如果網站圖形驗證碼還顯示不出來,報錯如下:

Fatal error: Call to undefined function core\extend\code\imagettftext()

按照以下步驟進行:

docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include

重新編譯:
docker-php-ext-install gd

如果報錯:

configure: error: freetype-config not found.

運行: apt install libfreetype6-dev ,然后再繼續運行上面的命令。 

gd庫中有了freetype,則驗證碼顯示正常了。

同理,如果提示沒有mysqli擴展,執行 docker-php-ext-install mysqli 命令再重啟php容器即可。

四、擴展知識

1、docker-php-source

此命令在PHP容器中創建一個/usr/src/php的目錄,里面放了一些自帶的文件而已。我們就把它當作一個從互聯網中下載下來的PHP擴展源碼的存放目錄即可。事實上,所有PHP擴展源碼擴展存放的路徑: /usr/src/php/ext 里面。

格式:

docker-php-source extract | delete

參數說明:
* extract : 創建並初始化 /usr/src/php目錄
* delete : 刪除 /usr/src/php目錄

2、docker-php-ext-enable

這個命令是用來啟動 PHP擴展 的。我們使用pecl安裝PHP擴展的時候,默認是沒有啟動這個擴展的,如果想要使用這個擴展必須要在php.ini這個配置文件中去配置一下才能使用這個PHP擴展。而 docker-php-ext-enable 這個命令則是自動給我們來啟動PHP擴展的,不需要你去php.ini這個配置文件中去配置。

3、docker-php-ext-install

這個命令是用來安裝並啟動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 對應的配置文件即可。

原文出處:https://xushanxiang.com/2020/01/docker-php-gd.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM