準備基礎鏡像
- alpine:3.22
完整的 Dockerfile
如下:
# 使用官方的 Alpine 3.22 鏡像作為基礎鏡像
FROM --platform=$TARGETPLATFORM alpine:3.22 AS builder# 設置環境變量
ENV DEBIAN_FRONTEND=noninteractive# 創建目錄結構
WORKDIR /app# 備份原始源文件并更換為阿里云的鏡像源
RUN cp /etc/apk/repositories /etc/apk/repositories.bak && \sed -i 's|https://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g' /etc/apk/repositories# 安裝常用工具與依賴
RUN apk add --no-cache \wget \gnupg \curl \bash \shadow \su-exec \libintl \libssl3 \icu-libs \krb5-libs \libpng \zlib \glib \dbus \atk \pango \gdk-pixbuf \gtk3 \libX11 \libXext \libXrender \libXinerama \libXi \libXrandr \libXcursor \libXdamage \libXcomposite \libXtst \cups-libs \gst-plugins-base \ffmpeg && \# 添加 Microsoft 包倉庫wget -O /tmp/microsoft.asc https://packages.microsoft.com/keys/microsoft.asc && \gpg --import /tmp/microsoft.asc && \echo "https://packages.microsoft.com/repos/microsoft-alpine-$(cat /etc/os-release | grep -Po 'VERSION_ID=\"\K[^\"+]')-stable main" > /etc/apk/repositories.d/microsoft-apex.repo && \rm -rf /tmp/* && \apk update && \apk add --no-cache powershell# 安裝 .NET SDK
RUN wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh && \chmod +x dotnet-install.sh && \./dotnet-install.sh -c Current && \rm dotnet-install.sh# 安裝全局工具 codegenerator 和 aspire
RUN dotnet workload install aspire && \dotnet tool install -g dotnet-aspnet-codegenerator# 創建非 root 用戶和組(安全處理已存在的情況)
RUN if getent group appgroup > /dev/null; then groupdel appgroup; fi && \if getent passwd appuser > /dev/null; then userdel appuser; fi && \groupadd -g 1000 appgroup && \useradd -u 1000 -g appgroup -m appuser# 最終運行階段(精簡)
FROM alpine:3.22# 復用前面階段的環境變量和安裝結果
COPY --from=builder /root/.dotnet /root/.dotnet
COPY --from=builder /home/appuser /home/appuser
COPY --from=builder /app /app# 設置工作目錄
WORKDIR /app# 將 .NET CLI 添加到 PATH 環境變量
ENV PATH="/root/.dotnet:${PATH}"# 安裝最小運行時依賴
RUN apk add --no-cache \libintl \libssl3 \icu-libs \krb5-libs && \rm -rf /var/cache/apk/*# 切換用戶
USER appuser# 設置默認 Shell(可選)
SHELL ["/bin/bash", "-c"]# 輸出測試信息
CMD ["sh", "-c", "echo 'Alpine 鏡像源已成功更換為阿里云!PowerShell 和 .NET SDK 已安裝。'"]
說明:安裝常用工具與依賴,此處可以依據實際使用到的工具安裝,生產環境防止安全隱患,應該使用最小化原則安裝,只安裝實際使用到的工具包,減少不必要的攻擊面風險。
🧼 總結
- 備份了原始源文件:通過
cp /etc/apk/repositories /etc/apk/repositories.bak
實現。 - 清理緩存:使用
rm -rf /var/cache/apk/*
清理apk
緩存。 - 多階段構建:提升最終鏡像純凈度,去除構建依賴。
- 減少
RUN
層數:將多個命令合并為一個RUN
,避免不必要的中間層殘留。