docker安装php扩展gd库
<p>Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。</p><p>Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux(Windows,MacOS) 机器上,也可以实现虚拟化。</p>
<p>容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。</p>
<h2 id="title-0">一、安装nginx、php、mysql镜像</h2>
<pre class="wp-block-code"><code>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</code></pre>
<p>使用命令 <code>docker images</code> 查看本地镜像:</p>
<pre>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
</pre>
<blockquote class="wp-block-quote">
<p>善用 <code>docker search</code> 命令来查看可用版本。</p>
<cite>https://www.runoob.com/docker/docker-search-command.html</cite></blockquote>
<h2 id="title-1">二、运行、停止、删除容器</h2>
<p>可以执行命令 <code>docker container ls</code> (或docker ps)或者 <code>docker container ls -all</code>(或docker ps -a),来查看已启动的容器或者所有容器。</p>
<pre class="wp-block-code"><code>docker run --name xu-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.6.46</code></pre>
<pre class="wp-block-code"><code>docker run --name xu-phpmyadmin -d --link xu-mysql:db -p 8081:80 phpmyadmin/phpmyadmin
# 访问http://127.0.0.1:8081/,使用root/123456账号信息登录管理mysql</code></pre>
<pre class="wp-block-code"><code>docker run --namexu-php-fpm5.6 -v ~/code/docker/nginx/www:/www-d php:5.6-fpm</code></pre>
<p>下面Nginx + PHP:</p>
<pre class="wp-block-code"><code>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</code></pre>
<blockquote class="wp-block-quote">
<p>参考:</p>
<cite>https://www.runoob.com/docker/docker-install-php.html<br>https://hub.docker.com/_/php</cite></blockquote>
<p>当把web程序代码放入 <code>~/code/docker/nginx/www</code> 后,在浏览器打开<code>http://127.0.0.1:8080/</code>,提示:</p>
<p class="has-background has-pale-pink-background-color">您的服务器环境不支持gd扩展,将无法使用验证码!</p>
<p>容器的停止、删除,如下:</p>
<p class="has-background has-very-light-gray-background-color">docker stop 027c0f432aae # 此外对应的容器id<br>docker rm 027c0f432aae</p>
<p>查看mysql容器的ip地址,连接数据库时用得上:</p>
<pre class="wp-block-code"><code>docker inspect --format='{{.NetworkSettings.IPAddress}}' xu-mysql</code></pre>
<h2 id="title-2">三、安装php扩展gd库</h2>
<p>如果之前启用了 <code>gd</code>,需要先在 <code>php.ini</code> 文件中注释掉 <code>extension=gd.so</code> 并重启容器。</p>
<p>进入php容器:</p>
<pre class="wp-block-code"><code>docker exec -it <容器ID或容器名称> /bin/bash</code></pre>
<p>可把软件源修改为国内某镜像站源,例如容器软件源 <code>/etc/apt/sources.list</code> 修改为网易镜像站源,以<code>stretch</code>为例:</p>
<pre class="wp-block-code"><code># 先做备份:
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</code></pre>
<p>编辑器推荐安装 <code>vim</code>,默认没有安装,请先执行 <code>apt-get update</code>,再安装 <code>apt-get install vim</code>,但是往往矛盾的是,我如果能够快速更新并安装的话,就用不着换源了,所以使用最基本的命令“<code>echo</code>”:</p>
<pre class="wp-block-code"><code># 依次执行:
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</code></pre>
<pre class="wp-block-code"><code># 更新软件源
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容器
……</code></pre>
<p>如果网站图形验证码还显示不出来,报错如下:</p>
<p class="has-background has-pale-pink-background-color">Fatal error: Call to undefined function core\extend\code\imagettftext()</p>
<p>按照以下步骤进行:</p>
<pre class="wp-block-code"><code>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</code></pre>
<p>如果报错:</p>
<p class="has-background has-pale-pink-background-color">configure: error: freetype-config not found.</p>
<p>运行: <code>apt install libfreetype6-dev</code> ,然后再继续运行上面的命令。 </p>
<p>gd库中有了freetype,则验证码显示正常了。</p>
<p>同理,如果提示没有mysqli扩展,执行 <code>docker-php-ext-install mysqli</code> 命令再重启php容器即可。</p>
<h2 id="title-3">四、扩展知识</h2>
<h3 id="docker-php-source">1、docker-php-source</h3>
<p>此命令在PHP容器中创建一个/usr/src/php的目录,里面放了一些自带的文件而已。我们就把它当作一个从互联网中下载下来的PHP扩展源码的存放目录即可。事实上,所有PHP扩展源码扩展存放的路径: /usr/src/php/ext 里面。</p>
<p>格式:</p>
<pre class="wp-block-code"><code>docker-php-source extract | delete</code></pre>
<p>参数说明:<br>* extract : 创建并初始化 /usr/src/php目录<br>* delete : 删除 /usr/src/php目录</p>
<h3>2、docker-php-ext-enable</h3>
<p>这个命令是用来启动 PHP扩展 的。我们使用pecl安装PHP扩展的时候,默认是没有启动这个扩展的,如果想要使用这个扩展必须要在php.ini这个配置文件中去配置一下才能使用这个PHP扩展。而 docker-php-ext-enable 这个命令则是自动给我们来启动PHP扩展的,不需要你去php.ini这个配置文件中去配置。</p>
<h3 id="docker-php-ext-install">3、docker-php-ext-install</h3>
<p>这个命令是用来安装并启动PHP扩展的。<br>命令格式:<br>docker-php-ext-install “源码包目录名”</p>
<p>注意点:</p>
<ul>
<ul>
<li>“源码包“需要放在 /usr/src/php/ext 下</li>
<li>默认情况下,PHP容器没有 /usr/src/php这个目录,需要使用 docker-php-source extract来生成。</li>
<li>docker-php-ext-install 安装的扩展在安装完成后,会自动调用docker-php-ext-enable来启动安装的扩展。</li>
<li>卸载扩展,直接删除/usr/local/etc/php/conf.d 对应的配置文件即可。</li>
</ul>
</ul>
<p>原文出处:https://xushanxiang.com/2020/01/docker-php-gd.html</p><br><br>
来源:https://www.cnblogs.com/xusx2014/p/12181916.html
頁:
[1]