[英]Is there anyway to use docker composer image with custom php?
我想為我的 laravel 應用程序在多級 dockerfile 中使用 docker 作曲家圖像以減小其大小。 我的依賴項需要 PHP 7.4 的問題,但作曲家的 PHP 是 8.1.1。 有沒有辦法自定義這個? 如果沒有辦法降級它的 PHP 版本,我該如何減小我的 docker 映像的大小,我應該使用什么來安裝我的項目依賴項?
我嘗試使用--ignore-platform-reqs
標志安裝依賴項,但應用程序在構建后無法運行。
FROM composer:latest
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install
Composer 映像將使用當前最新版本的 PHP,因此composer:latest
永遠不會為您提供 7.4。 您可以向后掃描舊的 Composer docker 映像,直到找到基於 7.4 的最新映像,然后使用該映像的特定版本。
FROM composer:1.10.19
但是請注意,您永遠不會以這種方式獲得作曲家的更新版本。
或者,如果大小是一個問題,那么您可以將您的圖像基於alpine:latest
(它很小,目前在其應用程序倉庫中使用 7.4),然后使用apk add php-cli
安裝 PHP。 這將為您提供大約 20mb 的圖像,但 Alpine 遲早會將其基礎 PHP 更新為 8.0,您的圖像會損壞。
可能您最好的選擇是將您的映像基於顯式版本化的 PHP 容器之一,例如php:7.4-cli-alpine
,然后將最新的 Composer 安裝到該映像中。 這將使您更好地控制在您的映像中運行的 PHP 版本,並且稍后復制此映像以使其基於 8.0 進行升級測試將非常容易。
我最近遇到了這個問題,並通過兩個步驟解決了它。
platform
配置告訴作曲家使用 PHP 的指定版本。 這最近成為一個問題,因為在 PHP 8.1 中, post-autoload-dump
開始拋出有關 Laravel 的Collection
class 的錯誤。 后自動加載腳本正在運行 Laravel 代碼,這意味着即使我們剛剛安裝了 v 7.X 的依賴項,我們仍在使用 8.1 執行腳本。
可能有更好的方法來解決這個問題,如果有,請告訴我。 但這就是我所做的。
更新了composer.json
以指定平台:
"config": {
"platform": {
"php": "7.3.33" // Or your specific version
}
},
告訴作曲家跳過自動加載生成:
RUN composer install --no-autoloader
最后,在我的最終圖像中:
RUN composer dump-autoload
這里的缺點是您必須在最終映像中安裝 Composer,這在某種程度上違背了在構建期間拆分作業的目的。
您可以選擇遵循Composer docker 映像自述文件中的建議並以這種方式包含它,並完全放棄多階段構建:
COPY --from=composer /usr/bin/composer /usr/bin/composer
雖然我不能自信地說沒有更好的選擇來解決這個問題,但我希望這個答案能夠解釋問題存在的原因,並為您指明解決問題的正確方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.