基于 alpine 構建 .net 的基礎鏡像

準備基礎鏡像

  • 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,避免不必要的中間層殘留。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87456.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87456.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Blob分析及形態學分析

目錄 Blob分析的基本思想: Blob分析主要流程: Blob分析 分割: Binary Threshold 分割: Histogram 分割: 動態閾值 全局閾值與動態局部閾值的比較 形態學處理 連通區域 connetion 形態學算子 特征提取 提取特征 常用相關算子 區域特征&#…

中小河流雨水情監測預報系統解決方案

一、方案概述 中小河流在防洪減災體系中地位關鍵,但由于其數量眾多、分布廣泛,監測預報基礎相對薄弱,易引發洪水災害,威脅沿岸居民生命財產安全。本系統旨在構建完善的中小河流雨水情監測預報體系,提升防洪減災能力。實…

Abase和ByteKV存儲方案對比

Abase 和 ByteKV 是字節跳動內部自研的兩款分布式 KV 存儲系統,雖然都服務于大規模在線業務,但在設計目標、架構模型、適用場景等方面存在顯著差異。以下是核心區別的詳細分析: 🔧 ?1. 設計目標與一致性模型? ?Abase?&#x…

JSON的縮進格式方式和緊湊格式方式

將對象轉化為json格式字符串在以縮進的方式顯示 HxParamMsg hxCommMsg new HxParamMsg() {name "Tom",age 25 }; string json JsonConvert.SerializeObject(hxCommMsg); var parsed JToken.Parse(json); string data parsed.ToString(Formatting.Indented); // …

設計模式篇:靈活多變的策略模式

引言:從現實世界到代碼世界的面向對象在商業策略制定中,企業會根據市場環境選擇不同的競爭策略;在軍事行動中,指揮官會根據敵情選擇不同的戰術;在游戲對戰中,玩家會根據局勢調整作戰方式。這種根據情境選擇…

Bitvisse SSH Client 安裝配置文檔

一、軟件功能介紹? Bitvisse SSH Client 是一款功能強大的 SSH 客戶端軟件,具備以下顯著特點:? 豐富的代理隧道協議支持:支持 socks4、socks4a、socks5 和 http 等多種連接代理隧道協議,為網絡連接提供多樣選擇。?便捷的應用…

DataGear 5.4.1 發布,數據可視化分析平臺

DataGear 數據可視化分析平臺 5.4.1 發布,BUG修復,具體更新內容如下: 修復:修復SQL數據集使用預編譯語法后SQL關鍵字防注入功能不起作用的BUG;修復:修復內置圖表選項disableSetting在圖表展示頁不起作用的…

Visual Studio install 解決進度條不加載,自動安裝失敗導致軟件無法打開問題

路徑 C:\Windows\System32\drivers\etc修改hosts文件,需要右鍵管理員權限打開。 # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to h…

關于小波降噪、小波增強、小波去霧的原理區分

在傳統的圖像處理中使用小波分解是一種常見的方法。經常分不清小波降噪和小波增強的區別,簡單記錄下二者的區別同時再記錄一下小波去霧的原理。一、小波降噪原理信號分解小波降噪基于小波變換。它將含噪信號分解成不同尺度(頻率)下的小波系數…

Python商務數據分析——Matplotlib 數據可視化學習筆記

一、Matplotlib 基礎認知 1.1 庫功能與定位 核心作用:將數據可視化展示,提升數據直觀性與說服力 應用場景:繪制折線圖、餅圖、柱狀圖等 2D/3D 圖表 雙接口模式: MATLAB 風格:通過pyplot函數快速繪圖(自…

GIC控制器(一)

目錄 處理器工作模式 異常源 ?編輯寄存器組織結構 異常處理流程 CPSR寄存器 異常向量表 編寫異常向量表 CP15協處理器 CP15 協處理器寄存器分組 協處理器指令 C0寄存器 C1寄存器 C12寄存器 C15寄存器 CBAR寄存器 Reset異常 前言: GIC(G…

深入解析RS485通信:從原理到Linux驅動開發實踐

深入解析RS485通信:從原理到Linux驅動開發實踐在工業控制、智能建筑和物聯網領域,RS485憑借其強大的抗干擾能力和多節點組網特性,成為長距離可靠通信的首選方案。本文將帶您深入理解RS485的核心技術。一、RS485通信技術解析 1.1 RS485與RS232…

Linux系統常用性能分析運維命令

分類命令描述CPU性能分析相關命令mpstat -P ALL 5監控所有CPU的使用情況,間隔5秒后輸出一組數據。用于查看是否出現某個CPU占滿的情況CPU性能分析相關命令pidstat -u 5 1監控所有進程的CPU使用情況,用于查看是否出現某個進程CPU占用過高的問題CPU性能分析…

HTTP 壓縮

介紹 壓縮是提升網站性能的關鍵手段之一。對于某些類型的文件,最大可減少 70% 的大小,從而大幅降低帶寬需求。隨著時間的推移,壓縮算法不斷得到優化,新的高效算法也逐漸被客戶端和服務器所支持。 在實際應用中,Web 開…

STM32之循跡避障模塊TCRT5000紅外反射傳感器

目錄 一、系統概述 二、TCRT5000紅外反射傳感器簡介 2.1 基本概述 2.2 結構與工作原理 2.2.1 物理結構 2.2.2 工作流程 2.2.3 電路原理圖 2.3 電氣特性 2.4 模塊接口說明 2.5 典型應用電路 2.6 實際應用注意事項 三、硬件設計 3.1 硬件組成 3.2 硬件連…

新能源汽車功率級測試自動化方案:從理論到實踐的革命性突破

> 在800V高壓平臺普及與碳化硅半導體爆發的雙輪驅動下,傳統測試方法正經歷顛覆性變革 “當我看到工程師手動記錄測試數據時,就知道這個行業需要一場革命。”——某新能源車企測試總監的深夜感慨 ## 01 新能源汽車測試的痛點與變革 當新能源汽車的**電驅系統功率密度突…

【網絡編程】事件驅動 reactor 式的服務器(EPOLL機制)

文章目錄業務拆解事件驅動的 reactor總流程圖C 代碼實現準備工作編寫頭文件 reactor.h準備頭文件準備宏定義聲明三大模塊函數和基礎的內存變量長度定義全局變量定義 EPOLL 實例事件處理的函數與釋放資源的函數注冊服務器監聽套接字的函數accept_cb 模塊read_cb 模塊send_cb 模塊…

如何做好云服務器密碼管理

一、設置強密碼 強密碼就像是給云服務器上了一把“超級鎖”。專家建議,一個強密碼應該包含大寫字母、小寫字母、數字和特殊字符,長度至少在 12 位以上。比如說,“Abc12345678”就比簡單的“123456”要安全得多。有數據顯示,簡單密…

《新消費模式與消費者權益保護研討會》課題研討會在北京順利召開

近期,《新消費模式與消費者權益保護研討會》課題研討會在北京召開。來自市場監管、政法、宏觀管理等部門專家參會,聚焦《消費者權益保護法》《關于以新業態新模式引領新型消費加快發展的意見》等文件精神,探討激發市場主體活力、促進新型消費…

Gradio全解13——MCP協議詳解(6)——MCP服務器構建、測試與示例大全

Gradio全解13——MCP協議詳解(6)——MCP服務器構建、測試與示例大全第13章 MCP協議詳解13.6 MCP服務器構建、測試與示例大全13.6.1 開發MCP天氣服務器1. 天氣服務器概述2. 安裝Node.js并設置環境3. 構建服務器13.6.2 安裝Claude for Desktop1. 安裝Claud…