最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像

 更新時(shí)間:2022年07月30日 10:39:55   作者:InCerry  
本文編寫的初衷是因?yàn)樵谌豪镉泻芏嘈』锇橛龅缴a(chǎn)環(huán)境性能問題的時(shí)候,.NET的runtime鏡像中沒有帶一些工具,安裝和使用起來很麻煩,所以分享一些我們公司內(nèi)部一些技巧,對(duì).NET鏡像帶診斷工具相關(guān)知識(shí)感興趣的朋友一起看看吧

現(xiàn)階段的問題

現(xiàn)在是云原生和容器化時(shí)代,.NET Core對(duì)于云原生來說有非常好的兼容和親和性,dotnet社區(qū)以及微軟為.NET Core提供了非常方便的鏡像容器化方案。所以現(xiàn)在大多數(shù)的dotnet程序都是部署在各種容器化環(huán)境中,比如我們常見的Docker。

微軟官方為.NET提供的許多Docker鏡像,讓我們可以很方便的創(chuàng)建容器化的.NET應(yīng)用。如下所示就是部分官方提供的不同操作系統(tǒng)的鏡像。

其它更詳細(xì)的內(nèi)容大家可以點(diǎn)擊后面的網(wǎng)址查看:https://hub.docker.com/_/microsoft-dotnet-runtime/

使用VS新建一個(gè)項(xiàng)目,微軟官方給出的多段構(gòu)建Dockerfile如下所示:

# 使用aspnet runtime鏡像作為基礎(chǔ)鏡像
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base
WORKDIR /app
EXPOSE 80

# 使用sdk鏡像進(jìn)行編譯 
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鏡像發(fā)布
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

# 拷貝編譯結(jié)果到base鏡像,完成鏡像打包
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

現(xiàn)在看起來一切都很美好,但是假設(shè)我們遇到某一些線上CPU 100%、內(nèi)存占用率很高或者程序突然停止響應(yīng)等問題我們需要使用dotnet-tracedotnet-dump等工具時(shí)就會(huì)發(fā)現(xiàn)使用不了。

而且在沒有安裝.NET SDK的情況下,我們也無法安裝dotnet tool。

解決方案

1.直接使用命令安裝dotnet sdk,然后再安裝dotnet tool,微軟在官網(wǎng)給出的非常方便的安裝方案,但是這不是我們想要的,畢竟每次還得下載多麻煩。

2.構(gòu)建最終鏡像使用sdk鏡像,這樣的話我們就可以直接安裝好這些工具,這也不是我們想要的,因?yàn)?code>sdk鏡像太大了,不利于我們分發(fā)和下載(自建機(jī)房的鈔能力除外)。

3.就是我們今天提到的方案,我們可以利用Docker多段構(gòu)建,使用sdk鏡像安裝好dotnet tool以后,直接COPY到我們r(jià)untime的鏡像,然后在runtime的鏡像中使用。

# 使用aspnet runtime鏡像作為基礎(chǔ)鏡像
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base
WORKDIR /app
EXPOSE 80

# 使用sdk鏡像進(jìn)行編譯 
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鏡像發(fā)布
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

# 拷貝編譯結(jié)果到base鏡像,完成鏡像打包
FROM base AS final
WORKDIR /app

# !!! 從build鏡像中把dotnet工具COPY出來 并設(shè)置為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"]

其中關(guān)鍵就是這兩步,在build中使用dotnet tool來安裝好所需要的工具,然后復(fù)制到runtime鏡像中。

...
# !!! 在build鏡像安裝dotnet tools
RUN dotnet tool install -g dotnet-dump \
    && dotnet tool install -g dotnet-trace
...
# !!! 從build鏡像中把dotnet工具COPY出來 并設(shè)置為PATH
COPY --from=build /root/.dotnet/tools /root/.dotnet/tools
ENV PATH="$PATH:/root/.dotnet/tools"

當(dāng)然我們可以打包一個(gè)包含好工具的runtime,供后面使用,就不用每次都安裝tool了。我個(gè)人比較喜歡使用Ubuntu作為基礎(chǔ)鏡像,大家也可以用Alpine之類的基礎(chǔ)鏡像來進(jìn)一步縮小體積。

# 使用sdk鏡像進(jìn)行編譯 
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鏡像作為基礎(chǔ)鏡像
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base
WORKDIR /app

# !!! 從build鏡像中把dotnet工具COPY出來 并設(shè)置為PATH
COPY --from=build /root/.dotnet/tools /root/.dotnet/tools
ENV PATH="$PATH:/root/.dotnet/tools"

最終鏡像也很小,當(dāng)然我們可以使用單文件發(fā)布和Native AOT讓鏡像它變得更小,那就是后話了,不在本文中介紹。

常用的工具

因?yàn)楣臼亲越C(jī)房,所以對(duì)于存儲(chǔ)和網(wǎng)絡(luò)帶寬都比較寬裕,我們一般會(huì)在生產(chǎn)環(huán)境運(yùn)行的鏡像中安裝下面這些工具。

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

在遇到線上問題的時(shí)候,排查起來非常方便,對(duì)于一些內(nèi)存泄漏和CPU滿的問題,配合dotTrace很容易就能定位到問題所在。

總結(jié)

本文編寫的初衷是因?yàn)樵谌豪镉泻芏嘈』锇橛龅缴a(chǎn)環(huán)境性能問題的時(shí)候,.NET的runtime鏡像中沒有帶一些工具,安裝和使用起來很麻煩,所以分享一些我們公司內(nèi)部一些技巧,希望能幫到大家。

到此這篇關(guān)于如何創(chuàng)建一個(gè)帶診斷工具的.NET鏡像的文章就介紹到這了,更多相關(guān).NET鏡像帶診斷工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件

    C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件

    本篇文章主要介紹了C#的Process類調(diào)用第三方插件實(shí)現(xiàn)PDF文件轉(zhuǎn)SWF文件,現(xiàn)在分享給大家,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼

    C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼

    這篇文章主要介紹了C# 實(shí)現(xiàn)特殊字符快速轉(zhuǎn)碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 一文帶你快速學(xué)會(huì)C#中WinForm框架的使用詳解

    一文帶你快速學(xué)會(huì)C#中WinForm框架的使用詳解

    WinForm是一門非常經(jīng)濟(jì)實(shí)惠的技術(shù),就是說,可以在短時(shí)間內(nèi)學(xué)會(huì),并迅速借此進(jìn)行項(xiàng)目開發(fā)。本文就來和大家聊聊WinForm框架的使用方法,希望對(duì)大家有所幫助
    2023-02-02
  • C#實(shí)現(xiàn)HTTP訪問類HttpHelper的示例詳解

    C#實(shí)現(xiàn)HTTP訪問類HttpHelper的示例詳解

    在項(xiàng)目開發(fā)過程中,我們經(jīng)常會(huì)訪問第三方接口,如我們需要接入的第三方接口是Web API,這時(shí)候我們就需要使用HttpHelper調(diào)用遠(yuǎn)程接口了。本文為大家介紹了C#實(shí)現(xiàn)HTTP訪問類HttpHelper的示例代碼,需要的可以參考一下
    2022-09-09
  • C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能

    C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能

    由于大多數(shù)便攜式設(shè)備支持瀏覽圖片而不支持瀏覽PowerPoint 文件,所以相比較而言,圖像對(duì)于用戶而言更加友好。本文將利用C#/VB.NET實(shí)現(xiàn)PPT或PPTX轉(zhuǎn)換為圖像功能,需要的可以參考一下
    2022-08-08
  • 詳解c# Emit技術(shù)

    詳解c# Emit技術(shù)

    這篇文章主要介紹了c# Emit技術(shù)的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#中一個(gè)高性能異步socket封裝庫(kù)的實(shí)現(xiàn)思路分享

    C#中一個(gè)高性能異步socket封裝庫(kù)的實(shí)現(xiàn)思路分享

    下面小編就為大家分享一篇C#中一個(gè)高性能異步socket封裝庫(kù)的實(shí)現(xiàn)思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C#實(shí)現(xiàn)的文件壓縮和解壓縮類

    C#實(shí)現(xiàn)的文件壓縮和解壓縮類

    這篇文章主要介紹了C#實(shí)現(xiàn)的文件壓縮和解壓縮類,實(shí)例分析了C#針對(duì)文件壓縮與解壓縮的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#在復(fù)雜多線程環(huán)境下使用讀寫鎖同步寫入文件

    C#在復(fù)雜多線程環(huán)境下使用讀寫鎖同步寫入文件

    這篇文章介紹了C#在復(fù)雜多線程環(huán)境下使用讀寫鎖同步寫入文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 最新評(píng)論

    河北区| 北票市| 霸州市| 崇礼县| 连州市| 麻栗坡县| 普兰店市| 灵璧县| 平远县| 蕲春县| 塔城市| 五家渠市| 巴东县| 富阳市| 荆门市| 江达县| 兴仁县| 岱山县| 门源| 汉阴县| 南充市| 张家界市| 靖宇县| 陇南市| 慈溪市| 甘肃省| 余姚市| 沅江市| 开鲁县| 宜昌市| 民丰县| 许昌县| 苍溪县| 天津市| 淅川县| 泸水县| 台湾省| 沙河市| 兴和县| 长沙市| 柳江县|