天天看點

docker php gd擴充,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 container ls -all

,來檢視已啟動的容器或者所有容器。

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結合,如果啟動了這個容器,可以停止并删除它,如下:

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

docker rm 027c0f432aae

下面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擴充,将無法使用驗證碼!

三、安裝php擴充gd庫

# 如果之前啟用了gd,需要先在php.ini檔案中注釋掉extension=gd.so并重新開機容器

# 進入php容器

docker exec -it /bin/bash

# 容器中

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

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

# 更新軟體源

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容器

……

四、擴充知識

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 對應的配置檔案即可。