在 PHP 項目中,可以使用多階段構建來減小 Docker 鏡像的體積,提高構建效率。以下是一個 PHP Dockerfile 中的多階段構建示例:
# 第一階段:構建 PHP 應用
FROM php:7.4 AS builder
WORKDIR /app
# 安裝依賴
COPY composer.json composer.lock ./
RUN apt-get update && apt-get install -y git zip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --no-scripts --no-autoloader
# 復制應用代碼
COPY . .
# 構建應用
RUN composer dump-autoload --optimize
# 第二階段:運行 PHP 應用
FROM php:7.4
WORKDIR /app
# 復制第一階段構建的應用
COPY --from=builder /app .
# 運行應用
CMD ["php", "-S", "0.0.0.0:8080", "-t", "public"]
在這個示例中,第一階段使用 php:7.4
鏡像構建 PHP 應用,并安裝依賴、復制應用代碼、構建應用;第二階段則使用 php:7.4
鏡像運行 PHP 應用,并從第一階段復制構建的應用代碼。
通過多階段構建,可以避免將構建工具和依賴包等無關內容打包進最終的 Docker 鏡像中,從而減小鏡像的體積并提高構建效率。