首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 中的 PHP 安装扩展插件

Docker 中的 PHP 安装扩展插件

作者头像
菲宇
发布于 2019-06-11 09:48:56
发布于 2019-06-11 09:48:56
5.8K10
代码可运行
举报
文章被收录于专栏:菲宇菲宇
运行总次数:0
代码可运行

1. PHP 源码

为了保证 Docker 镜像尽量小,PHP 的源文件是以压缩包的形式存在镜像中,官方提供了 docker-php-source 快捷脚本,用于对源文件压缩包的解压(extract)及解压后的文件进行删除(delete)的操作。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM php:7.1-apache
RUN docker-php-source extract \
    # 此处开始执行你需要的操作 \
    && docker-php-source delete

注意:一定要记得删除,否则解压出来的文件会大大增加镜像的文件大小。

2. 安装扩展

2.1. 核心扩展

这里主要用到的是官方提供的 docker-php-ext-configuredocker-php-ext-install 快捷脚本,如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM php:7.1-fpm
RUN apt-get update \
	# 相关依赖必须手动安装
	&& apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    # 安装扩展
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    # 如果安装的扩展需要自定义配置时
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

注意:这里的 docker-php-ext-configuredocker-php-ext-install 已经包含了 docker-php-source 的操作,所有不需要再手动去执行。

2.2. PECL 扩展

因为一些扩展并不包含在 PHP 源码文件中,所有需要使用 PECL(PHP 的扩展库仓库,通过 PEAR 打包)。用 pecl install 安装扩展,然后再用官方提供的 docker-php-ext-enable 快捷脚本来启用扩展,如下示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM php:7.1-fpm
RUN apt-get update \
	# 手动安装依赖
	&& apt-get install -y libmemcached-dev zlib1g-dev \
	# 安装需要的扩展
   && pecl install memcached-2.2.0 \
   # 启用扩展
   && docker-php-ext-enable memcached

2.3. 其它扩展

一些既不在 PHP 源码包,也不再 PECL 扩展仓库中的扩展,可以通过下载扩展程序源码,编译安装的方式安装,如下示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM php:5.6-apache
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p xcache \
    && tar -xf xcache.tar.gz -C xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && ( \
        cd xcache \
        && phpize \
        && ./configure --enable-xcache \
        && make -j$(nproc) \
        && make install \
    ) \
    && rm -r xcache \
    && docker-php-ext-enable xcache

注意:官方提供的 docker-php-ext-* 脚本接受任意的绝对路径(不支持相对路径,以便与系统内置的扩展程序进行区分),所以,上面的例子也可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM php:5.6-apache
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p /tmp/xcache \
    && tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && docker-php-ext-configure /tmp/xcache --enable-xcache \
    && docker-php-ext-install /tmp/xcache \
    && rm -r /tmp/xcache

将以下代码保存为一份xxx.sh 并执行,即可扩展mysql、gd、phalcon

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#! /usr/bin

PHP_VERSION=7.0.10

docker run --name php \
-v /home/wwwroot:/home/wwwroot \
-v ~/php_config/php.ini:/usr/local/etc/php/php.ini \
-p 9000:9000 \
-d php:${PHP_VERSION}-fpm

docker exec -it php sed -i "s/33/2016/g" /etc/passwd
docker exec -it php sed -i "s/33/2016/g" /etc/group

docker exec -it php bash -c "set -ex \
&& cd ~ \
&& mv /etc/apt/sources.list /etc/apt/sources.list.bak \
&& { \
echo deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib; \
echo deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib; \
echo deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib; \
echo deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib; \
} | tee /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y git \
libpcre3-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysql \
&& docker-php-ext-install pdo_mysql \
&& curl -o /usr/local/etc/php/php.ini https://raw.githubusercontent.com/php/php-src/PHP-${PHP_VERSION}/php.ini-production \
&& git clone -b 2.1.x --depth=1 git://github.com/phalcon/cphalcon.git ~/cphalcon \
&& cd ~/cphalcon/ext \
&& export CFLAGS=\"-O2 -finline-functions -fvisibility=hidden\" \
&& phpize \
&& ./configure --enable-phalcon \
&& make \
&& make install \
&& docker-php-ext-enable phalcon \
&& rm -rf ~/cphalcon"

docker commit -a "technofiend <2281551151@qq.com>" -m "install gd、 phalcon、pdo_mysql、mysql extsions" php phalcon:${PHP_VERSION}-fpm

docker rm -f php
docker run --name php \
-v /home/wwwroot:/home/wwwroot \
-v ~/php_config/php.ini:/usr/local/etc/php/php.ini \
-p 9000:9000 \
-d phalcon:${PHP_VERSION}-fpm

docker exec -it php sed -i "s/33/2016/g" /etc/passwd
docker exec -it php sed -i "s/33/2016/g" /etc/group

docker 中安装PHP扩展

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
可以通过两种方式实现
1.pecl pdo_msql 

方式二:
docker-php-ext-install pdo pdo_mysql
如果报  /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent    
解决方案:
   直接在/usr/local/etc/php目录下面新建 conf.d目录和对应的docker-php-ext-pdo_msql.ini文件
其中docker-php-ext-pdo_msql.ini的内容为:
extension=pdo_mysql.so
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
这篇写的真不错,赞
这篇写的真不错,赞
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
避坑!用Docker搞定PHP开发环境搭建
因为最近换电脑的缘故需要重新部署一下本地的开发环境,之前采用的虚拟机方案,占用磁盘空间实在是太大,心疼SSD那么点地方,所以这次采用了Docker的方案来部署。关于这次部署的原则,我的想法是尽量使用官方的镜像来实现,尽量不改动或少改动镜像。因为是本地的开发环境,所以想多尝尝鲜,尽量使用高版本的软件来实现。从结果上来说,希望能给同样有需要搭建环境的同学起到一些帮助,少踩一些坑,如果能按照这篇文章的步骤一次搞定那是最好了。
猿哥
2020/02/26
3.9K0
避坑!用Docker搞定PHP开发环境搭建
教你如何做出想要的PHPDocker镜像
之前有篇文章讲过如何通过Docker来构建Laravel的开发环境,其实变通一下就能够在本地电脑上用Docker运行任何PHP项目,让任何PHP项目都能运行在Docker环境中主要是需要根据PHP项目的依赖制作PHP镜像的Dockerfile。这篇文章就主要讲一下如何根据需求制作PHP的Docker镜像文件。
KevinYan
2019/10/13
1.3K0
Docker-compose PHP8.0 Redis5.0 Mysql8.0 Nginx 环境脚手架
PHP DockerFile mcrypt扩展费了一些时间,php自己的bug,pecl上写着8.0支持1.0.3版本,可惜。 具体参考 https://bugs.php.net/bug.php?id
躺平程序员老修
2023/09/05
7570
Docker-compose PHP8.0 Redis5.0 Mysql8.0 Nginx 环境脚手架
docker部署php环境
IT不难
2023/11/17
5680
docker使用笔记VI -- PHP
接下来就可以参考 docker使用笔记IV -- 使用docker的风格分离Nginx PHP Mysql。
老高的技术博客
2022/12/28
3570
容器化的LNMP环境,如何升级PHP到8.1.9
提到docker你可能会想到k8s,想到分布式,想到高并发;那单机服务器,或者开发环境有没有必要上docker呢?我觉得有!以LNMP环境为例
崔哥
2022/09/22
1.3K0
docker下搭建MySQL+php-fpm+nginx容器环境
在/home/app/phpfile文件夹下创建 php.ini文件和conf.d文件夹
菲宇
2019/06/11
3.1K0
docker下搭建MySQL+php-fpm+nginx容器环境
docker搭建php+nginx+swoole+mysql+redis环境
软件:docker-ce version 18.09.3, docker-compose version 1.23.2
猿哥
2019/04/24
2.3K0
docker搭建php+nginx+swoole+mysql+redis环境
docker安装php7.2记录
准备通过Dockerfile构建php镜像,在使用docker-php-ext-install安装mcrypt扩展时遇到如下错误:
lestat
2018/09/25
8.8K0
为什么需要自定义一个基础镜像?
对于使用php (python)等开发的项目,由于是解释型语言并不需要编译代码这个步骤(go或者java将依赖打包到可执行程序(包)中),但是往往还需要安装一些依赖的库或者第三方模块。
用户1560186
2019/12/04
1.7K0
docker完整配置nginx+php+mysql
  docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:
smy
2019/03/06
6.7K0
docker完整配置nginx+php+mysql
用Docker玩转PHP环境配置
是否有这样的场景,你搞了一个项目,在本地开发时需要搭建环境,放到线上时也需要搭建环境,到公司想暗戳戳玩一下要搭建环境,不搭还不行,因为你的环境依赖还挺多。这个时候如果有了Docker,只需要在机器上装个Docker,放上写好的Dockerfile,一行命令就自动完成这个事,方便又高效,岂不是很爽?
IT派
2018/08/10
2.4K0
用Docker玩转PHP环境配置
基于docker安装opencart电商独立站
OpenCart 是世界著名的开源电子商务系统,系统开发语言为 PHP。早期由英国人 Daniel Kerr 个人开发,项目托管在 GitHub。OpenCart 总部设在香港,GitHub 项目仍由 Daniel 及其团队领导维护。开发者项目非常活跃,版本更新升级很快。据 Alexa 网站流量统计显示,OpenCart 已成为世界主流的电子商务建站系统。
IT不难
2022/06/12
3K0
基于docker安装opencart电商独立站
Docker进阶:Dockerfile以及docker-compose工具
本文作者为olei,转载请注明。
禹都一只猫olei
2018/08/02
1.8K0
Docker进阶:Dockerfile以及docker-compose工具
后端Laravel项目Docker构建
api和后台部署在同一台服务器上,通过nginx区分,nginx文件在nginx文件夹下
无忧366
2022/02/14
1.6K0
利用docker在服务器运行多个版本php
php7已经出来好一段时间了,众所周知它对性能的提升很大。现在假设我们有台比较老的服务器,系统是centos6,上面运行着一些老旧项目,其默认自带的php版本是5.3 。虽然说,我们可以升级到php7版本,但是,老旧不兼容php7,我们不能一刀切。最好的方式是php5.3和php7共存。所以,我们可以考虑利用docker来安装其他版本的php,既能保证环境独立,又极少造成性能损耗。下面以安装php7版本为例,介绍下具体做法。
猿哥
2019/04/24
2.2K0
docker-compose搭建 Nginx+PHP+MySQL 环境
到 https://code.aliyun.com/ 创建一个项目,如Dockerfile。之后我们把wordpress环境的所有相关Dockerfile及配置文件放置到centosbz目录。
菲宇
2019/06/13
2.1K0
docker-compose搭建 Nginx+PHP+MySQL 环境
Docker在PHP项目开发环境中的应用
环境部署是所有团队都必须面对的问题,随着系统越来越大,依赖的服务也越来越多,比如我们目前的一个项目就会用到: - Web服务器:Nginx - Web程序:PHP + Node - 数据库:MySQL - 搜索引擎:ElasticSearch - 队列服务:Gearman - 缓存服务:Redis + Memcache - 前端构建工具:npm + bower + gulp - PHP CLI工具:Composer + PHPUnit 因此团队的开发环境部署随之暴露出若干问题: 1. 依赖服务很多,本
前朝楚水
2018/04/03
2.8K0
使用Docker Compose部署NextCloud和WordPress
PHP官方的镜像启用和安装的扩展比较少,直接使用会导致WordPress和Nextcloud的健康检查一堆信息,所以使用Dockerfile来基于官方镜像构建一个专用的镜像,PHP需要的扩展包括:
ianzhi
2024/05/24
4540
Debian 9 下编译安装PHP及配置
# apt install gcc make # apt install libxml2 libxml2-dev    //xml库
星哥玩云
2022/07/20
1.3K0
相关推荐
避坑!用Docker搞定PHP开发环境搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档