

docker安装php扩展gd库
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.

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
-
8
编写基于PHP扩展库的后门 lxj616 ·
-
13
基于PHP扩展的WAF实现 lightless ·
-
80
什么是 PHP 扩展 通俗说,PHP 扩展是增强 PHP 语言功能的插件。PHP 提供了编程语言的语法,比如分支、循环、函数、类等,这些是 PHP 本身所提供的。在某些情况下需要在 PHP 语言的基础上进行扩展,那么就需要通过 PHP 底层提供...
-
8
Yaf-一个PHP扩展实现的PHP框架 本文地址: https://www.laruence.com/2010/09/04/1736.html 转载请注明出处
-
3
PHP FFI详解 - 一种全新的PHP扩展方式 本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处
-
13
给php-7.1.5添加扩展fileinfo |坐而言不如起而行! 二丫讲梵 > 迎刃而解 > 给php-7.1.5添加扩展fileinfo 本文预计阅读时间 6 分钟fileinfo...
-
9
PHP扩展开发:第一个扩展 浏览:1912次 出处信息 在上一篇文章《PHP扩展...
-
10
docker安装php nginx mysql容器化记录如果您发现本文排版有问题,可以先点击下面的链接切...
-
3
PHP安装IMAP扩展 Nov 21st, 2018 Posted by CaiKnife Nov 21st, 2018
-
8
首页技术宅PHP8安装ZIP扩展,使用源码安装PHP扩展中的 ZIP扩展 PHP8安装ZIP扩展,使用源码安装PHP扩展中的 ZIP扩展
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK