php - 如何使这个 docker 图像更小?
问题描述
我有以下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。我正在尝试将此图像压缩到 < 100 Mb,以便我可以在 Zeit 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
页面。
解决方案
使 docker 图像更小的一般提示:
- 使用最小的基础镜像,例如 alpine 版本。在这种情况下,您可以使用类似的东西
php:7.2-alpine
并使用 apk 安装 apache。 - 使用 apt-get 时遵循最佳实践。特别添加
&& rm -rf /var/lib/apt/lists/*
- 尝试使用 gulp minify 之类的东西来缩小添加到图像中的代码。
推荐阅读
- python-3.x - 如何使用 lambda 通过函数传递参数
- react-native - 用 redash 和 reanimated 反应原生捏缩放
- spring-boot-chaos-monkey - spring-boot-chaos-monkey - 在同一应用程序的多个实例上更改 assualts/watcher 配置
- apache - 极限挑战失败。来自 http://service.domain1.com/.well-known/acme-challenge/xWsuGIi0JmuEuDzS5qPkVX3oHuzY2kNl0YGoU6HltRg 的无效响应
- python - 如何获得 groupby 组内的平均事务数?
- azure-devops - Azure DevOps 在赛普拉斯测试管道中获得 403(禁止)
- rest - 在 RESTful API 中识别单个资源的多种方法
- pandas - Writing data frame with object dtype to HDF5 only works after converting to string
- selenium - XPath ElementNotVisibleError SeleniumBasic ChomeDriver AutoHotkey ahk
- javascript -