zoukankan      html  css  js  c++  java
  • 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 coreextendcodeimagettftext()

    按照以下步骤进行:

    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

  • 相关阅读:
    Nginx反向代理和jetty服务器配置
    如何使用canvas绘图
    毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
    如何提高用户逃离成本
    首次创业者必须知道哪些基本常识?
    拦截器、过滤器、监听器各有什么作用
    第一人称入行分享贴:大学混了四年,如何顺利入行互联网
    线下学习
    如何实现数组深拷贝和浅拷贝?
    从零学前端第二讲:CSS行内块级元素布局与定位
  • 原文地址:https://www.cnblogs.com/xusx2014/p/12181916.html
Copyright © 2011-2022 走看看