13

docker安装php扩展gd库

 4 years ago
source link: https://xushanxiang.com/2020/01/docker-php-gd.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

【注】容器的停止、删除,如下:

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扩展,将无法使用验证码!

查看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 对应的配置文件即可。

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK