docker构建phpfpm镜像并添加扩展

1. 拉取官方镜像

docker pull php:7.3-fpm

这里以 7.3-fpm 版本为例

2. 镜像运行生成容器

docker run -p 9007:9000 --name phpfpm73 -v d:\Docker\www:/var/www/html -v d:\Docker\php-fpm73:/usr/local/etc/php -v d:\Docker\logs:/var/log -d php:7.3-fpm

将容器命名为 phpfpm73,
将容器的 9000 端口映射到宿主机的 9007 端口(也可更改为其他端口),
挂载工作目录、配置目录(宿主机的d:\Docker\php-fpm73目录下要先弄好配置文件 php.ini )、日志目录。

3. 添加扩展

php镜像添加扩展主要用到以下几个命令:

  • docker-php-source
  • docker-php-ext-install
  • docker-php-ext-enable
  • docker-php-ext-configure

docker-php-source 用于创建或删除 /usr/src/php 目录,PHP 镜像中自带的扩展源码存放的路径:/usr/src/php/ext,
docker-php-ext-install 用于安装并启动 /usr/src/php/ext 目录下的扩展,
docker-php-ext-enable 用于启用扩展,比如通过 pecl 安装的扩展默认是没有启用的,通过这个命令,可以无需到 php.ini 配置文件中去配置,
docker-php-ext-configure 一般都是需要跟 docker-php-ext-install 搭配使用,它的作用就是安装扩展的时候,需要自定义配置时,就可以使用它。

3.1 启用扩展库

确保镜像 /usr/src/php/ext 目录存在,如果不存在的话,可以通过下列命令调出镜像默认的扩展库

docker-php-source extract

3.2 添加容器扩展库中已有的扩展

在容器中,通过 ls -al /usr/src/php/ext 可以查看扩展库中已有的扩展,并通过下列命令可以直接安装并启用该扩展:

docker-php-ext-install [Package]

如:

docker-php-ext-install mcrypt \
&& docker-php-ext-install mysql \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install sockets \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install gettext \
&& docker-php-ext-install soap

安装扩展的时候有时候会提示缺少某些依赖,这时就需要先安装其所需依赖,在执行 docker-php-ext-install
如:

apt-get update \
&& apt-get install -y libmcrypt-dev \
&& apt-get install -y libxml2-dev \
&& apt-get install -y libssl-dev

而对于有些扩展,是需要通过 docker-php-ext-configure 进行配置的,比如安装 PHP 的图像扩展:

apt-get install -y libjpeg-dev \
&& apt-get install -y libpng-dev \
&& apt-get install -y libfreetype6-dev \
&& docker-php-ext-configure gd --with-jpeg-dir --with-png-dir --with-freetype-dir \
&& docker-php-ext-install -j$(nproc) gd

3.3 添加容器扩展库中不存在的扩展

3.3.1 通过pecl安装

通过 pecl 安装的扩展默认没有启用,需要执行 docker-php-ext-enable 进行启用。
先在 pecl 上找到需要的扩展,然后执行下列操作:

pecl install [Package]

接着启用该扩展

docker-php-ext-enable [Package]

如:pecl install mongodb && docker-php-ext-enable mongodb

3.3.2 通过下载源码安装

可将下载的扩展源码解压后放置于 /usr/src/php/ext 目录下,然后使用 docker-php-ext-install 命令进行安装,如安装 PHP 的 redis 扩展:

curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && docker-php-ext-install redis

3.4 删除扩展库

docker-php-source delete

4. 卸载扩展

直接删除 /usr/local/etc/php/conf.d 目录下对应的配置文件

5. 容器生成镜像并推送到 Docker Hub

至此,phpfpm 镜像已经制作完成,为了避免下次重做,可以将该phpfpm容器保存为镜像,然后推送到Docker Hub上,下次就可以直接拉下来使用了。
将容器保存为镜像:

docker commit -m="add some extension." -a="Hongxuan" phpfpm73 1758677739/phpfpm:7.3

通过docker images可以看到新生成的1758677739/phpfpm:7.3镜像(名字自己定)
接着将镜像推送到 Docker Hub:

docker push 1758677739/phpfpm:7.3

完结。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章