<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
現在是雲原生和容器化時代,.NET Core對於雲原生來說有非常好的相容和親和性,dotnet社群以及微軟為.NET Core提供了非常方便的映象容器化方案。所以現在大多數的dotnet程式都是部署在各種容器化環境中,比如我們常見的Docker。
微軟官方為.NET提供的許多Docker映象,讓我們可以很方便的建立容器化的.NET應用。如下所示就是部分官方提供的不同作業系統的映象。
其它更詳細的內容大家可以點選後面的網址檢視:https://hub.docker.com/_/microsoft-dotnet-runtime/
使用VS新建一個專案,微軟官方給出的多段構建Dockerfile如下所示:
# 使用aspnet runtime映象作為基礎映象 FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base WORKDIR /app EXPOSE 80 # 使用sdk映象進行編譯 FROM mcr.microsoft.com/dotnet/sdk:6.0-focal AS build WORKDIR /src COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"] RUN dotnet restore "WebApplication1/WebApplication1.csproj" COPY . . WORKDIR "/src/WebApplication1" RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build # 使用build映象釋出 FROM build AS publish RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish # 拷貝編譯結果到base映象,完成映象打包 FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
現在看起來一切都很美好,但是假設我們遇到某一些線上CPU 100%、記憶體佔用率很高或者程式突然停止響應等問題我們需要使用dotnet-trace
、dotnet-dump
等工具時就會發現使用不了。
而且在沒有安裝.NET SDK的情況下,我們也無法安裝dotnet tool。
1.直接使用命令安裝dotnet sdk,然後再安裝dotnet tool,微軟在官網給出的非常方便的安裝方案,但是這不是我們想要的,畢竟每次還得下載多麻煩。
2.構建最終映象使用sdk
映象,這樣的話我們就可以直接安裝好這些工具,這也不是我們想要的,因為sdk
映象太大了,不利於我們分發和下載(自建機房的鈔能力除外)。
3.就是我們今天提到的方案,我們可以利用Docker多段構建,使用sdk
映象安裝好dotnet tool以後,直接COPY到我們runtime的映象,然後在runtime的映象中使用。
# 使用aspnet runtime映象作為基礎映象 FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base WORKDIR /app EXPOSE 80 # 使用sdk映象進行編譯 FROM mcr.microsoft.com/dotnet/sdk:6.0-focal AS build WORKDIR /src COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"] RUN dotnet restore "WebApplication1/WebApplication1.csproj" COPY . . WORKDIR "/src/WebApplication1" RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build # !!! 在build映象安裝dotnet tools RUN dotnet tool install -g dotnet-dump && dotnet tool install -g dotnet-trace # 使用build映象釋出 FROM build AS publish RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish # 拷貝編譯結果到base映象,完成映象打包 FROM base AS final WORKDIR /app # !!! 從build映象中把dotnet工具COPY出來 並設定為PATH COPY --from=build /root/.dotnet/tools /root/.dotnet/tools ENV PATH="$PATH:/root/.dotnet/tools" COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
其中關鍵就是這兩步,在build中使用dotnet tool來安裝好所需要的工具,然後複製到runtime映象中。
... # !!! 在build映象安裝dotnet tools RUN dotnet tool install -g dotnet-dump && dotnet tool install -g dotnet-trace ... # !!! 從build映象中把dotnet工具COPY出來 並設定為PATH COPY --from=build /root/.dotnet/tools /root/.dotnet/tools ENV PATH="$PATH:/root/.dotnet/tools"
當然我們可以打包一個包含好工具的runtime,供後面使用,就不用每次都安裝tool了。我個人比較喜歡使用Ubuntu作為基礎映象,大家也可以用Alpine之類的基礎映象來進一步縮小體積。
# 使用sdk映象進行編譯 FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build # !!! 在build映象安裝dotnet tools RUN dotnet tool install -g dotnet-dump && dotnet tool install -g dotnet-trace # 使用aspnet runtime映象作為基礎映象 FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base WORKDIR /app # !!! 從build映象中把dotnet工具COPY出來 並設定為PATH COPY --from=build /root/.dotnet/tools /root/.dotnet/tools ENV PATH="$PATH:/root/.dotnet/tools"
最終映象也很小,當然我們可以使用單檔案發布和Native AOT讓映象它變得更小,那就是後話了,不在本文中介紹。
因為公司是自建機房,所以對於儲存和網路頻寬都比較寬裕,我們一般會在生產環境執行的映象中安裝下面這些工具。
RUN dotnet tool install -g dotnet-dump && dotnet tool install -g dotnet-trace && dotnet tool install -g dotnet-counters && dotnet tool install -g dotnet-sos && dotnet tool install -g dotnet-gcdump && dotnet tool install -g dotnet-monitor && dotnet tool install -g dotnet-symbol && dotnet tool install -g JetBrains.dotTrace.GlobalTools
在遇到線上問題的時候,排查起來非常方便,對於一些記憶體漏失和CPU滿的問題,配合dotTrace很容易就能定位到問題所在。
本文編寫的初衷是因為在群裡有很多小夥伴遇到生產環境效能問題的時候,.NET的runtime映象中沒有帶一些工具,安裝和使用起來很麻煩,所以分享一些我們公司內部一些技巧,希望能幫到大家。
到此這篇關於如何建立一個帶診斷工具的.NET映象的文章就介紹到這了,更多相關.NET映象帶診斷工具內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45