Slo*_*wie 3 php docker dockerfile
我已经在 Docker 容器中设置了一个 Symfony4 项目。
我按照Jobeet-Tutorial在那里他们使用phpdocker.io - generator。
一切都很完美,但速度很慢。所以我想加速并启用opcache并配置它。
我在网上找到了有用的链接。所以我在我的 Dockerfile 中添加了以下内容:
RUN docker-php-ext-configure opcache --enable-opcache \
&& docker-php-ext-install opcache
# Copy configuration
COPY config/opcache.ini $PHP_INI_DIR/conf.d/
Run Code Online (Sandbox Code Playgroud)
问题是我没有这个帮助脚本:
所以我决定在互联网上搜索它并将其复制到我的项目中。
现在我把它放在我的 docker 目录的 php-fpm 文件夹中。
我的目录现在看起来像这样 - 脚本位于 Dockerfile 下方:
有没有我忘记做的其他步骤,比如在某处注册这些脚本?
小智 5
对您的问题最直接的回答是您需要将这些脚本复制到您正在构建的 Docker 映像中。为此,您应该在php-fpm名为的目录中创建一个子目录bin,并将所有这些脚本放在该目录中。然后,在您的 Dockerfile 中:
COPY bin /usr/local/bin
Run Code Online (Sandbox Code Playgroud)
现在,当您尝试使用该图像时,脚本将位于您的可执行文件中PATH。
docker-php-ext-*您找到的那些脚本来自PHP 项目的官方 Docker 映像,旨在与这些映像一起使用。
您正在使用的phpdockerio/php73-fpm:latest图像,这似乎使用ubuntu:bionic作为基础图像。这些脚本在很大程度上依赖于 PHP Dockerfiles,它执行一系列准备步骤,例如将 PHP 解释器本身的源代码下载到/usr/src. 让这些脚本直接在phpdockerio容器中运行将是一个非常复杂的过程。
这给你留下了 2 个选择:
放弃脚本并安装 Ubuntu 的预构建包。您似乎已经安装了 apcu、apcu-bc、cli、curl、json、mbstring、opcache、readline、xml 和 zip PHP 扩展。您可以通过运行以这种方式查看默认存储库中可用的软件包的完整列表
COPY bin /usr/local/bin
Run Code Online (Sandbox Code Playgroud)
当你知道你想要哪些包时,你可以将它们添加到你的 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; \
"]
Run Code Online (Sandbox Code Playgroud)如果 Ubuntu 18 和 Debian 是二进制兼容的(它们不是),您可以尝试第三个选项,即使用 PHP 映像构建扩展,然后复制构建的扩展作为多阶段构建的第二阶段. 如果您的图像使用与 PHP 图像相同的 Linux 风格,这将是可能的。例如,如果您的图像基于alpine:3.8,您可以使用php:7.3-fpm-alpine3.8来构建您的扩展并复制它们。
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |