【发布时间】:2019-04-13 19:31:29
【问题描述】:
我有以下 dockerfile:
FROM php:7.2-apache
LABEL name "medico-app"
COPY composer.json composer.lock ./
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y --no-install-recommends git zip && composer install
COPY . /var/www/html
EXPOSE 80
构建此映像时,它的大小约为 500 Mbs。我正在尝试将此图像压缩到 Now 上使用它。根据我在 docker 文档中阅读的内容,多阶段构建有时有助于使图像更小。我目前的想法是将 dockerfile 分成两个阶段,一个阶段我将使用compose 安装依赖项,另一个阶段我将拥有php 和apache。不过,我似乎无法正确处理。有什么建议吗?
这是我目前所拥有的:
# first stage
FROM composer:latest
COPY composer.json composer.lock ./
RUN composer install
第二阶段,我试过了
FROM httpd:2.4-alpine
LABEL name "medico-app"
COPY --from=0 /app/vendor ./vendor
COPY . /usr/local/apache2/htdocs/
EXPOSE 80
但是,当我现在运行容器时,没有提供 php 文件,我只是将它们视为文本。我可能在这里用 PHP/Apache 遗漏了一些东西。
编辑:
我也尝试了第二阶段,但我无法让它工作:
FROM php:7.2-alpine
LABEL name "medico-app"
RUN apk --no-cache update && apk --no-cache add apache2 openrc
COPY --from=0 /app/vendor ./vendor
COPY . /var/www/
EXPOSE 80
现在,当我打开本地主机时,我看不到应该看到的 PHP 文件。我只看到默认的it works 页面。
【问题讨论】:
-
您可以在安装依赖项后清除 apt 列表以节省一些空间:
rm -rf /var/lib/apt/lists/*。但是您的问题更可能是巨大的vendor文件夹。 -
@martinadamek 供应商文件夹实际上小于 5 MB。问题是基础映像本身 > 300 MB。
-
那么也许可以尝试安装 alpine 版本的 php 并手动安装 apache。
-
@martinadamek 这就是我想要做的(我的最后一次编辑)。
标签: php apache docker dockerfile