詳解.NET Core+Docker 開發(fā)微服務(wù)
.NET Core發(fā)布很久了,因?yàn)榻鼛啄曛饕褂胘ava,所以還沒使用過(guò).NET Core,今天正好有一個(gè)c#寫的demo,需要做成服務(wù),不想再轉(zhuǎn)成java來(lái)實(shí)現(xiàn),考慮使用.NET CORE來(lái)嘗下鮮,目標(biāo)是開發(fā)一個(gè)微服務(wù),然后部署到Docker swarm集群,供其他應(yīng)用調(diào)用。
環(huán)境準(zhǔn)備
下載.NET core的最新版本2.1.3, 安裝后打開命令行驗(yàn)證:
出現(xiàn)下面的輸出,就代表安裝成功了
dotnet Usage: dotnet [options] Usage: dotnet [path-to-application] Options: -h|--help Display help. --info Display .NET Core information. --list-sdks Display the installed SDKs. --list-runtimes Display the installed runtimes. path-to-application: The path to an application .dll file to execute.
然后是VS CODE安裝c#插件,

以及安裝nuget插件,方便管理擴(kuò)展。
創(chuàng)建工程
使用dotnet new name創(chuàng)建項(xiàng)目,其中name是項(xiàng)目類型,具體如下:
C:\Users\jqpeng>dotnet new --help 使用情況: new [選項(xiàng)] 選項(xiàng): -h, --help 顯示有關(guān)此命令的幫助。 -l, --list 列出包含指定名稱的模板。如果未指定名稱,請(qǐng)列出所有模板。 -n, --name 正在創(chuàng)建輸出的名稱。如果未指定任何名稱,將使用當(dāng)前目錄的名稱。 -o, --output 要放置生成的輸出的位置。 -i, --install 安裝源或模板包。 -u, --uninstall 卸載一個(gè)源或模板包。 --nuget-source 指定在安裝期間要使用的 NuGet 源。 --type 基于可用的類型篩選模板。預(yù)定義的值為 "project"、"item" 或 "other"。 --force 強(qiáng)制生成內(nèi)容,即使該內(nèi)容會(huì)更改現(xiàn)有文件。 -lang, --language 根據(jù)語(yǔ)言篩選模板,并指定要?jiǎng)?chuàng)建的模板的語(yǔ)言。 模板 短名稱 語(yǔ)言 標(biāo)記 ---------------------------------------------------------------------------------------------------------------------------- Console Application console [C#], F#, VB Common/Console Class library classlib [C#], F#, VB Common/Library Unit Test Project mstest [C#], F#, VB Test/MSTest NUnit 3 Test Project nunit [C#], F#, VB Test/NUnit NUnit 3 Test Item nunit-test [C#], F#, VB Test/NUnit xUnit Test Project xunit [C#], F#, VB Test/xUnit Razor Page page [C#] Web/ASP.NET MVC ViewImports viewimports [C#] Web/ASP.NET MVC ViewStart viewstart [C#] Web/ASP.NET ASP.NET Core Empty web [C#], F# Web/Empty ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages ASP.NET Core with Angular angular [C#] Web/MVC/SPA ASP.NET Core with React.js react [C#] Web/MVC/SPA ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library ASP.NET Core Web API webapi [C#], F# Web/WebAPI global.json file globaljson Config NuGet Config nugetconfig Config Web Config webconfig Config Solution File sln Solution Examples: dotnet new mvc --auth Individual dotnet new classlib --framework netcoreapp2.1 dotnet new --help
開發(fā)微服務(wù),可以dotnet new mvc,創(chuàng)建一個(gè)mvc項(xiàng)目,然后VS CODE打開即可。
工程實(shí)現(xiàn)
實(shí)現(xiàn)就簡(jiǎn)單了,按部就班coding就可以,和幾年前的.NET MVC沒有本質(zhì)區(qū)別:
新建一個(gè)APIController,添加一個(gè)方法:
public JsonResult Search(string tfsid)
{
try
{
return Json(new { success = true, data = PailitaoApi.SearchByTFSId(tfsid) });
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return Json(new { success = false, data = "Search failed!" }); ;
}
}
然后刪掉默認(rèn)的模板文件,將HomeControler里的代碼清理掉,保留Index,減小包體積
public string Index()
{
return "api";
}
主要代碼OK!
Docker 鏡像編譯
按照官方指南,我們編寫Dockefile,主要是通過(guò)microsoft/dotnet:2.1-sdk AS build實(shí)現(xiàn)編譯,通過(guò)microsoft/dotnet:2.1-aspnetcore-runtime來(lái)運(yùn)行,具體見下面,注意pailitao.dll需要修改成你項(xiàng)目的名稱:
FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /app # copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # copy everything else and build app COPY . ./ RUN dotnet publish -c Release -o out FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime WORKDIR /app COPY --from=build /app/out ./ EXPOSE 80 ENTRYPOINT ["dotnet", "appname.dll"]
簡(jiǎn)單分析:
build時(shí),先dotnet restore
通過(guò)dotnet publish -c Release -o out 編譯release版本dll
然后構(gòu)建runtime,從build環(huán)境將out 目錄拷貝出來(lái)
然后EXPOSE 80端口,設(shè)置ENTRYPOINT 為‘dotnet appname.dll'
微服務(wù)CICD
首先是構(gòu)建,先將代碼放入SVN, 在Jenkins里新建自由模式項(xiàng)目,Build里使用Build/publish Docker Image:

然后部署,構(gòu)建好image后,通過(guò)shell執(zhí)行部署:
docker service rm pailitaoservice docker service create --name pailitaoservice --replicas 1 --publish 15001:80 192.168.86.8:5000/pailitaoservice
最后,測(cè)試下服務(wù):

- 詳解ASP.NET Core Docker部署
- Centos7+Docker+Jenkins+ASP.NET Core 2.0自動(dòng)化發(fā)布與部署的實(shí)現(xiàn)
- Linux服務(wù)器下利用Docker部署.net Core項(xiàng)目的全過(guò)程
- ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的完整實(shí)例
- .Net Core自動(dòng)化部署之利用docker版jenkins部署dotnetcore應(yīng)用的方法
- docker部署Asp.net core應(yīng)用的完整步驟
- 詳解ASP.NET Core 網(wǎng)站在Docker中運(yùn)行
- ASP.NET Core 2.1 使用Docker運(yùn)行的方法步驟
- Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟
- Docker結(jié)合.Net Core的初步使用教程
相關(guān)文章
asp.net實(shí)現(xiàn)生成縮略圖及給原始圖加水印的方法示例
這篇文章主要介紹了asp.net實(shí)現(xiàn)生成縮略圖及給原始圖加水印的方法,結(jié)合具體實(shí)例形式分析了asp.net圖片的縮略圖與水印操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-10-10
.NET Core 實(shí)現(xiàn)微信小程序支付功能(統(tǒng)一下單)
最近公司研發(fā)了幾個(gè)電商小程序,還有一個(gè)核心的電商直播,只要是電商一般都會(huì)涉及到交易信息,離不開支付系統(tǒng),這里我們統(tǒng)一實(shí)現(xiàn)小程序的支付流程。感興趣的朋友跟隨小編一起看看吧2019-09-09
asp.net中TextBox只能輸入數(shù)字的最簡(jiǎn)潔的兩種方法
這篇文章介紹了asp.net中TextBox只能輸入數(shù)字的最簡(jiǎn)潔的兩種方法,有需要的朋友可以參考一下2013-11-11
C#調(diào)用動(dòng)態(tài)unlha32.dll解壓Lha后綴的打包文件分享
這篇文章介紹了,C#調(diào)用動(dòng)態(tài)unlha32.dll解壓Lha后綴的打包文件,有需要的朋友可以參考一下2013-09-09
ASP.NET?Core中Razor頁(yè)面與MVC區(qū)別介紹
這篇文章介紹了ASP.NET?Core中Razor頁(yè)面與MVC的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Asp.Net Core輕松學(xué)習(xí)系列之配置文件
這篇文章主要給大家介紹了關(guān)于Asp.Net Core輕松學(xué)習(xí)系列之配置文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
ASP.Net Core基于ABP架構(gòu)配置To Json序列化
這篇文章介紹了ASP.Net Core基于ABP架構(gòu)配置To Json序列化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
在IIS上部署ASP.NET Core Web API的方法步驟
這篇文章主要介紹了在IIS上部署ASP.NET Core Web API的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

