我已经在Docker容器中设置了一个Symfony4项目。
我跟踪Jobeet-Turotial,因为他们使用的是the phpdocker.io - generator。
一切正常,但速度很慢。因此,我想加速并启用opcache并对其进行配置。
我在网络上找到了有用的链接。因此,我将此添加到了Dockerfile中:
RUN docker-php-ext-configure opcache --enable-opcache \
&& docker-php-ext-install opcache
复制config / opcache.ini $ PHP_INI_DIR / conf.d /
问题是我没有此帮助脚本:
因此,我决定在互联网上进行搜索并将其复制到我的项目中。
现在我将其保存在我的docker目录的php-fpm文件夹中。
我的目录现在看起来像这样-脚本在Dockerfile的下面:
还有其他我忘了做的步骤吗? 在某个地方注册此脚本? 还是其他一些东西?
我真的想使用这个辅助脚本。
迈克尔
答案 0 :(得分:1)
您问题的最直接答案是,您需要将这些脚本复制到要构建的Docker映像中。为此,您应该在php-fpm
目录中创建一个名为bin
的子目录,并将所有这些脚本放入该目录中。然后,在您的Dockerfile中:
COPY bin /usr/local/bin
现在,当您尝试使用该图像时,脚本将位于可执行文件PATH
中。
您发现的这些docker-php-ext-*
脚本来自the PHP project's official Docker images,旨在与这些图像一起使用。
您正在使用phpdockerio/php73-fpm:latest
图片which seems to use ubuntu:bionic
as a base image。这些脚本在很大程度上依赖于PHP Dockerfile,这些文件执行许多准备步骤,例如downloading the source code for the PHP interpreter itself to /usr/src
。使这些脚本直接在phpdockerio
容器中运行将是一个非常复杂的过程。
剩下两个选项:
放弃脚本并安装Ubuntu的预构建软件包。您seem to already have已安装apcu,apcu-bc,cli,curl,json,mbstring,opcache,readline,xml和zip PHP扩展。您可以通过运行
来查看默认存储库中可用的软件包的完整列表。docker run --rm -it phpdockerio/php73-fpm:latest bash -c 'apt-get update && apt search ^php7.3-';
知道所需的软件包后,可以将它们添加到Dockerfile中。
改为使用正式的PHP映像,以便您可以使用docker-php-ext-*
脚本。您使用的phpdocker-io
映像本质上是Ubuntu上的PHP7.3-FPM,与此最接近的官方PHP映像是php:7.3-fpm-stretch
(Debian 9)。您可以通过将PHP-FPM Dockerfile更改为以下内容来构建和安装选项1中列出的扩展:
FROM php:7.3-fpm-stretch
# Run in Bash instead of Bourne shell to get lists
RUN ["bash", "-c", " \
#Exits on error or unbound variable. Now we can use semicolons instead of
#ampersands
set -eu; \
\
ext_build_dependencies=( \
#Needed to build php-curl
libcurl4-gnutls-dev \
\
#Needed to build php-mbstring
libedit-dev \
\
#Needed to build php-xml \
libxml2-dev \
\
#Needed to build php-zip
zlib1g-dev libzip-dev \
); \
\
apt-get update; \
apt-get install -y ${ext_build_dependencies[@]}; \
\
#Build the extensions
docker-php-ext-install curl json mbstring readline xml zip ; \
pecl install apcu apcu_bc; \
\
apt-get purge -y ${ext_build_dependencies[@]}; \
apt-get autoremove -y; \
apt-get clean -y; \
"]
如果Ubuntu 18和Debian是二进制兼容的(they're not),则可以尝试第三个选项,即使用PHP映像构建扩展,然后复制构建的扩展as the second stage of a multi-stage build。如果您的映像使用与PHP映像相同的Linux风格,则可以这样做。例如,如果您的图片基于alpine:3.8
,则可以使用php:7.3-fpm-alpine3.8
构建扩展并将其复制。