日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.netcore项目docker化,以及docker之间通信

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .netcore项目docker化,以及docker之间通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡言:

  最近剛完成公司的新系統,系統使用的是微服務架構,由于領導說要將服務docker化。下面將我的研究結果分享出來,如若有錯誤的地方,還請各位大佬多多指點。

目錄:  

  • 什么是docker?

  • 使用docker有什么好處?

  • docker的使用和docker之間的通信

  • 1. 什么是docker?  

      Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱(沙箱:一個虛擬系統程序)機制,相互之間不會有任何接口。也就是說,我們可以用docker把我們系統和系統所需要的環境以及依賴的軟件都打包成一個安裝包,然后可以安裝到linux或windows上。

      關于docker三個核心概念:

  • 倉庫:存放鏡像的倉庫

  • 鏡像:類似于系統鏡像

  • 容器:鏡像的實例

  •   小時候我特喜歡去河邊沙灘上玩耍,一般都帶著一個袋子,里面裝了許多形狀的摸具。把沙子打濕之后,拿模具一按,一個形狀塊就有了,記得小時候最喜歡就就是五角星的模具。偶爾有調皮搗蛋的小伙伴會把我做的形狀給弄散,當時我不哭也不惱,拿起模具迅速就再做出一個來,氣的他沒話可說。有時候突發奇想,想到一種新的形狀,然后把它做出來之后,我就會把它記下來,然后回家立馬弄個新形狀的模具出來。

      在這里,我把docker比喻沙灘,而我的袋子就好比倉庫,而模具就是鏡像,容器自然就是拿模具做出來的形狀塊。而真正的程序開發中,你可以把鏡像理解為我們做的系統的安裝包,容器理解為安裝后的運行的系統。以上都是我自己個人對docker的理解,如果哪位大佬覺得不合理,還請多交流。

    2.使用docker有什么好處?

      以往的系統開發有這么一個問題,在開發人員的電腦上開發的系統,跑到其他人的電腦上或者是服務器上,需要配環境、安裝一大堆的軟件。不同的操作系統安裝方法還有可能不一樣。等安裝完了之后,一啟動發現一大堆的報錯,而再自己的電腦上跑的好好的(這里我遇到過)。還有就是,有可能公司的文件服務器比較悠閑,運行多個系統又怕干擾(這里可以使用虛擬機,但性能不是很好)。

      而使用docker,可以把開發好的系統以及系統所依賴的東西,打包成鏡像,然后可以發布到支持docker的平臺。并且docker能夠確保每個容器都擁有自己的資源,并且和其他容器是隔離的。你可以用不同的容器來運行使用不同堆棧的應用程序等等(docker好處實在太多,我就不一一列舉了)。

    3.docker的使用和docker之間的通信

      怎么安裝docker,去哪下載等等我就不講了,大家都不是編程小白。

      第一步:首先下載dotnet core鏡像:docker run -it microsoft/dotnet ,這個是啟動命令,如果鏡像不存在則會自動下載。

      第二步:創建項目

         1.首先創建一個userservice的web api core項目并創建一個usercontroller?,并修改Program類中的CreateWebHostBuilder  


    [Route("api/[controller]")]

    ???[ApiController]

    ???public?class?UserController : ControllerBase

    ???{

    ???????public?IActionResult Get()

    ???????{

    ???????????return?Ok(new[] {?new?{Id=1,Name="li"?},?new?{ Id = 2, Name =?"lisi"?} });

    ???????}

    ???}      

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://*:5000")
    .UseStartup<Startup>();

         2. 其次再創建一個emailservice的web? api core項目,并創建一個emailcontroller,在修改Program類中的CreateWebHostBuilder


    [Route("api/[controller]")]

    ?[ApiController]

    ?public?class?EmailController : ControllerBase

    ?{

    ?????public?IConfiguration Configuration {?get;?set; }

    ?????public?EmailController(IConfiguration Configuration)

    ?????{

    ?????????this.Configuration = Configuration;

    ?????}

    ?????public?async Task<IActionResult> Post(long?userId)

    ?????{

    ?????????using?(HttpClient client =?new?HttpClient())

    ?????????{

    ?????????????var?content = await client.GetAsync("http://user-service:5000/api/user");    //這里的user-service是docker的link機制,下面會講

    ?????????????return?new?JsonResult(new?{ users= await content.Content.ReadAsStringAsync() ,constr= Configuration["databaseurl"] });

    ?????????}

    ?????}

    ?}


    public?static?IWebHostBuilder CreateWebHostBuilder(string[] args) =>

    ???????????WebHost.CreateDefaultBuilder(args)

    ???????????????.UseUrls("http://*:4001")

    ???????????????.UseStartup<Startup>();

         最后,再分別發布下項目。

      第三步:編寫Dockerfile

       ?分別在publish文件夾同級建一個Dockerfile。有關dockerfile里面的指令解釋,請閱讀:https://www.cnblogs.com/linjiqin/p/8735230.html

      1.首先編寫emialservic的dockerfile:    

    ?  2. 編寫userservice的dockerfile:  

      第四步:分別在目錄下運行cmd,然后輸入:docker build -t dotnet/emailservice .和 docker build -t dotnet/userservice .(注意后面的 . 號),然后鏡像就制作完成了。

      第五步:因為emailservice依賴于userservice,所以emailservice和userservice要進行通信。

          docker通信有三種方式:


  • 通過docker容器ip加端口號。因為docker容器重啟之后ip地址會改變,不方便遷移。所以不推薦使用。(除非使用固定ip)

  • 通過映射到主機的端口號。這種方式可以,但是會占用主機端口號

  • docker的link機制。docker的link機制可以通過一個name來和另一個容器通信,link機制方便了容器去發現其它的容器并且可以安全的傳遞一些連接信息給其它的容器。


  •   我這采用link機制,首先編寫一個docker-compose.yml文件      

      然后emailservice可以通過:http://user-service:5000端口來訪問userservice服務 (我在前面的代碼中已經設置好了,所以就不用了)。運行命令:docker-compose up,就行了

    結果圖如下:(我這里為了顯示結果,然后映射到主機端口。在微服務中只需要把網關的端口映射出來就行)

      

    原文地址:https://www.cnblogs.com/norain/p/docker_comunication.html


    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

    總結

    以上是生活随笔為你收集整理的.netcore项目docker化,以及docker之间通信的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。