Taurus.MVC 微服務框架 入門開發教程:項目部署:4、微服務應用程式發布到Docker部署(上)。

系列目錄:

本系列分為項目集成、項目部署、架構演進三個方向,後續會根據情況調整文章目錄。

開源地址://github.com/cyq1162/Taurus.MVC

本系列第一篇:Taurus.MVC V3.0.3 微服務開源框架發布:讓.NET 架構在大並發的演進過程更簡單。

Taurus.MVC 微服務框架 入門開發教程:項目集成:1、服務端:註冊中心、網關(提供可運行程式下載)。

Taurus.MVC 微服務框架 入門開發教程:項目集成:2、客戶端:ASP.NET Core(C#)項目集成:應用中心。

Taurus.MVC 微服務框架 入門開發教程:項目集成:3、客戶端:其它程式語言項目集成:應用中心。

Taurus.MVC 微服務框架 入門開發教程:項目集成:4、默認安全認證與自定義安全認證。

Taurus.MVC 微服務框架 入門開發教程:項目集成:5、統一的日誌管理。

Taurus.MVC 微服務框架 入門開發教程:項目集成:6、微服務的二次開發。

Taurus.MVC 微服務框架 入門開發教程:項目部署:1、微服務應用程式常規部署實現多開,節點擴容。

Taurus.MVC 微服務框架 入門開發教程:項目部署:2、讓Kestrel支援綁定多個域名轉發,替代Ngnix使用。

Taurus.MVC 微服務框架 入門開發教程:項目部署:3、微服務應用程式版本升級:全站升級和局部模組升級。

Taurus.MVC 微服務框架 入門開發教程:項目部署:4、微服務應用程式發布到Docker部署(上)。

Taurus.MVC 微服務框架 入門開發教程:項目部署:5、微服務應用程式發布到Docker部署(下)。

Taurus.MVC 微服務框架 入門開發教程:項目部署:6、微服務應用程式Docker部署實現多開。

Taurus.MVC 微服務框架 入門開發教程:架構演進:1、從單應用程式簡單過渡到負載均衡。

Taurus.MVC 微服務框架 入門開發教程:架構演進:2、負載均到模組拆分負載。

Taurus.MVC 微服務框架 入門開發教程:架構演進:3、模組拆分負載到多級負載均衡。

Taurus.MVC 微服務框架 入門開發教程:運行示例://github.com/cyq1162/Taurus.MVC.MicroService.Demo

前言:

本篇教程,演示ASP.NET Core 微服務應用程式,如何最簡方式發布到Docker中部署,並運行起來。

新手兩個簡易概念:

1、映像:可以理解為Class,用於定義;

2、容器:可以理解為Class的實例化對象,new 多幾個就開多幾個容器,用於運行。

1、開發環境安裝Docker Desktop。

這個網上教程很多,可以官網教程下載安裝:Docker Desktop – Docker

也可以在VS添加Docker相關的程式時,按提示安裝,安裝成功啟動後介面大概是這樣的:

說明:

如果後續啟動就顯示Docker Desktop Stopped..,按網上說的弄註冊表還不行的話。

可以嘗試輸入以下命令:DockerCli.exe -SwitchDaemon

2、應用程式中添加Docker支援:

 

接著選擇運行環境:Linux。

 

如果項目中引用了外部目錄的工程文件,會提示錯誤:

 

解決:

1、要麼引用的工程放到同一目錄;
2、要麼只引用其打包的dll;
3、要麼直接就發布後再寫編繹dockfile文件執行。 

這裡換個單純引用dll的項目,繼續:

 

說明:

默認創建的Dockkfile包含了編繹和發布的內容,所以看起來多了一些。

如果自己編繹後發布後,再執行Dockerfile,可以省簡到最終5行即可,文章後面有。

EXPOSE參數的重點說明:

默認Docker是一個虛擬系統,裡面只運行一個ASP.NET Core應用程式,所以埠全都有,任意埠都可以。

EXPOSE是指應用程式的啟動的埠,應用程式運行什麼埠,這裡就修改成什麼埠,保持一致即可,可以任意埠,這個不影響。

實際對外訪問的埠,是後續創建容器的映射埠。

 3、生成映像:

系統執行Dockerfile上的命令行,並等待輸出日誌,提示成功後:

到Docker Desktop中可以看到映像:

4、生成容器:

1、滑鼠放上去,出來可執行菜單:點擊Run:

 

2、填寫容器名稱,和對外映射的埠號(這個才是最終訪問的埠號):

對於Taurus.mvc 框架的微服務,可以將映射的埠號,通過環境變數傳遞進去:

這個在第六篇會用到:6、微服務應用程式Docker部署實現多開。
本篇關於環境變數設置可以先忽略。

在ASP.NET Core應用程式,是無法直接獲取Docker的運行資訊的:

經過思考,可以預先讀取系統環境變數;

而環境變數,可以在創建容器的時候再設置;

這樣可以通過環境變更來實現傳遞某些資訊到應用程式;

 

 點Run,之後就可以了。

重複此步驟,通過添加不到的埠,可以新增節點,等同於程式複製。

5、檢測容易是否可正常運行:

點擊在瀏覽器運行:

總結一:

應用程式的Docker發布運行流程,目前來說,在Window系統開發時都可以通過可視化工具完成。

當然,也可以通過命令行完成,下面看一下最簡命令行的過程:

1、創建Dockerfile,如果放到發布目錄下,內容可以省略為:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 //引用ASP.Net Core 6 運行環境映像
WORKDIR /app  //Docker虛擬機的虛擬目錄,默認即可。
EXPOSE 80   //Docker虛擬機的虛擬埠,即應用程式在虛擬機的運行埠
COPY . .      //複製當前目錄的應用程式,到Docker中的虛擬目錄。 
ENTRYPOINT ["dotnet", "RegCenter.dll"] //運行時候,啟用.NET Core程式的命令。

之後即可按命令行走起:

1、cd 到發布目錄。

2、docker build -t  regcenter .    //創建映射 注意有個 . 號

3、docker run -d -p 8002:80 --name=8002 regcenter   //創建容器,容器外對運行埠是8002

命令也不多。

總結二:

到此為止,僅是在開發環境走了一遍布Docker的發布和運行。

那如何放到服務端呢?

一般思路,會先找到映像文件,再直接上傳到伺服器。

然而,Docker不允許這做,進而生成的映射文件,都是一些亂碼,本地對這些文件,暫時是不可容易見的。

要發布到伺服器上,目前的方式,需要將本地的鏡像推送到DockerHub中心,然後伺服器端再拉到本地運行。

這個過程,下一篇文章再介紹。