我看到例子
https://docs.docker.com/samples/library/php/
FROM php:5.6-cli
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
于是我使用下面的代码
FROM php:7.1.28-fpm-alpine
MAINTAINER xxx
ENV WORK_PATH /var/html/work
RUN mkdir -p $WORK_PATH
WORKDIR $WORK_PATH
ADD ./repo $WORK_PATH
#RUN apk add autoconf && docker-php-ext-install -j$(nproc) pdo_mysql
RUN tar -xf redis-4.3.0.tgz \
&& rm -rf redis-4.3.0.tgz \
&& docker-php-ext-configure $WORK_PATH/redis-4.3.0 --prefix=/usr/local/redis \
&& docker-php-ext-install $WORK_PATH/redis-4.3.0 \
&& rm -rf redis-4.3.0 \
&& tar -xf msgpack-2.0.3.tgz \
&& rm -rf msgpack-2.0.3.tgz \
&& docker-php-ext-configure $WORK_PATH/msgpack-2.0.3 --prefix=/usr/local/msgpack \
&& docker-php-ext-install $WORK_PATH/msgpack-2.0.3 \
&& rm -rf msgpack-2.0.3 \
&& tar -xf yaf-3.0.8.tgz \
&& rm -rf yaf-3.0.8.tgz \
&& docker-php-ext-configure $WORK_PATH/yaf-3.0.8 --prefix=/usr/local/yaf \
&& docker-php-ext-install $WORK_PATH/yaf-3.0.8 \
&& rm -rf yaf-3.0.8 \
&& tar -xf SeasLog-2.0.2.tgz \
&& rm -rf SeasLog-2.0.2.tgz \
&& docker-php-ext-configure $WORK_PATH/SeasLog-2.0.2 --prefix=/usr/local/SeasLog \
&& docker-php-ext-install $WORK_PATH/SeasLog-2.0.2 \
&& rm -rf SeasLog-2.0.2
CMD ["php-fpm"]
它总是安装一个扩展时安装依赖
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/25) Installing m4 (1.4.18-r1)
(2/25) Installing libbz2 (1.0.6-r6)
(3/25) Installing perl (5.26.3-r0)
...
安装成功后删除依赖
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20160303/
find . -name \*.gcno -o -name \*.gcda | xargs rm -f
find . -name \*.lo -o -name \*.o | xargs rm -f
find . -name \*.la -o -name \*.a | xargs rm -f
find . -name \*.so | xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp.la modules/* libs/*
(1/21) Purging .phpize-deps-configure (0)
(2/21) Purging dpkg-dev (1.19.2-r0)
(3/21) Purging dpkg (1.19.2-r0)
...
我的docker执行了4次安装依赖,4次删除依赖,非常的耗时间。
我很笨,找不到相关文档,所以我来这里提问,这是正常的还是是我哪里使用有问题?
That's normal for docker-php-ext-install
The Dockerfile
https://github.com/docker-library/php/blob/e63194a0006848edb13b7eff5a7f9d790d679428/7.1/alpine3.9/fpm/Dockerfile#L9-L20
In the script they then get marked for deletion
https://github.com/docker-library/php/blob/e63194a0006848edb13b7eff5a7f9d790d679428/7.1/alpine3.9/fpm/docker-php-ext-install#L89-L96
And then at the end they get removed
https://github.com/docker-library/php/blob/e63194a0006848edb13b7eff5a7f9d790d679428/7.1/alpine3.9/fpm/docker-php-ext-install#L116-L118
@wglambert 好的,谢谢大神。我理解为使用docker-php-ext-install必定会频繁的安装和删除依赖,如果不想频繁的安装和删除依赖,那么就不能使用docker-php-ext-install,而是要自己手动在Dockerfile中安装依赖,然后执行phpize && ./configure && make && make install自己安装所有扩展,是这样吗?
@wglambert 好的,谢谢大神。我理解为使用
docker-php-ext-install必定会频繁的安装和删除依赖,如果不想频繁的安装和删除依赖,那么就不能使用docker-php-ext-install,而是要自己手动在Dockerfile中安装依赖,然后执行phpize && ./configure && make && make install自己安装所有扩展,是这样吗?
Yes. That's a helper script only.
是的,那只是一个辅助安装的脚本而已。
Also please use English (or at least attach Google translated English with the original).
另外请不要在一个 99% 的 issues 都是英文的开源项目中坚持使用中文,至少你可以中文跟英文的机翻都贴上来。
@phy25 Ok,thanks. It's my first time to use issues. I will do my best to learn Engilsh.