前言
大家可能会在开发中遇到这个问题,当我们从docker-hub上拉取一个php镜像下来时,发现很多拓展都没有,导致无法很好为我所用,这个时候我们就可以自定义 Dockerfile,创建一个属于我们自己的一个镜像。接下来就来讲讲它的构建过程。
环境
php 7.4
composer 依赖管理工具
需要的拓展
swoole
redis
mongodb
xmlwriter
安装拓展需要的命令
- docker-php-source
格式:
docker-php-source extract | delete
参数说明:- extract:创建并初始化/usr/src/php 目录
- delete: 删除 /usr/src/php 目录
root@VM-8-11-ubuntu:/home/docker# docker run --name=myphp01 -it myphp:1.0 /bin/sh
# cd /usr/src
# ls
php.tar.xz php.tar.xz.asc
# docker-php-source extract
# ls
php php.tar.xz php.tar.xz.asc
注意:php容器默认是不会生成这个文件目录的。需要执行这个命令生成
- docker-php-ext-install
格式:
docker-php-ext-install "源码包目录名"
注意点:
1. "源码包"需要放在 /usr/src/php/ext 目录下
2. 默认情况下,PHP容器没有/usr/src/php 这个目录,需要使用 docker-php-source extract 来生成
3. 卸载扩展,直接删除 /usr/local/etc/php/conf.d对应的配置文件即可。
4. 可以直接使用pecl安装的就直接使用pecl安装
docker-php-ext-enable
用来启动扩展的。格式:
docker-php-ext-enable 扩展名
- docker-php-ext-configure
一般都是需要跟docker-php-ext-install搭配使用,它的作用是,当你安装扩展时,需要自定义配置时,就可以使用它来帮你做到。
构建 属于自己的PHP-Dockerfile 文件
FROM php:7.4
MAINTAINER docker_user docker_user@email.com
ENV TZ=Asia/Shanghai
RUN apt-get update && apt-get install -y \
--no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev curl \
&& apt-get install zlib1g-dev
RUN pecl install mongodb \
&& pecl install redis \
&& pecl install swoole \
&& pecl install xlswriter \
&& docker-php-ext-enable mongodb redis swoole xlswriter
RUN curl -o /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar \
&& chmod +x /usr/bin/composer
ENV COMPOSER_HOME=/tmp/composer
查看执行
执行构建命令 docker build -t myphp:1.0 .
docker run --name=myphp -it myphp:1.0 /bin/sh 进入容器
php -m 查看php扩展
composer -v 查看composer
我们可以看到这四个扩展和Composer已经安装上去了,所以之后我们还想装什么扩展,就可以按照这个方式装上去。构建自己专属的php环境啦。