.Net之Docker部署詳細流程

開篇語

自己從頭開始走一遍docker部署.net的流程,作為一種學習總結,以及後續會寫一些在該基礎之上的文章。

本次示例環境:vs2019、net5、docker、postman

創建項目

本次事例程式碼是用過vs2019創建的ASP.NET Core Web API項目

image.png
image.png

目標框架是.Net5,無需身份驗證,不配置HTTPS(根據個人需求勾選),啟動Docker(我習慣於後期添加),啟用OpenAPI支援(添加swagger文檔)

image.png
image.png

默認配置

創建完成後,我們查看項目目錄為下

image.png
image.png

我們直接F5啟動項目,發現直接跳轉一個API文檔頁面

image.png
image.png

Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。

修改配置

我基於個人習慣,我修改launchSettings.json文件,刪除IIS配置,刪除後如下所示:

{
  "iisSettings": {
    "windowsAuthentication"false,
    "anonymousAuthentication"true,
    "iisExpress": {
      "applicationUrl""//localhost:51539",
      "sslPort": 0
    }
  },
  "$schema""//json.schemastore.org/launchsettings.json",
  "profiles": {
    "Net5ByDocker": {
      "commandName""Project",
      "launchBrowser"true,
      "launchUrl""swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT""Development"
      },
      "dotnetRunMessages""true",
      "applicationUrl""//localhost:5000"
    }
  }
}

刪除默認控制器,添加新的控制器UserController,在裡面添加默認一些方法操作,如下

基於個人習慣的操作,也可以不刪除默認控制器

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UserController : ControllerBase
    {
        public static List<string> userInfo = new();

        [HttpGet]
        public IEnumerable<string> Get()
        {
            return userInfo;
        }

        [HttpPost]
        public List<string> Post([FromBody] string value)
        {
            if (!string.IsNullOrWhiteSpace(value))
                userInfo.Add(value);
            return userInfo.ToList();
        }

        [HttpDelete("{id}")]
        public List<string> Delete(string id)
        {
            if (!string.IsNullOrWhiteSpace(id))
                userInfo.Remove(id);
            return userInfo.ToList();
        }
    }

其他配置保持默認,啟動項目

image.png
image.png

生成鏡像

添加dockerfile

選中項目右鍵添加docker支援,本次部署在windows平台

image.png
image.png

拉取基礎鏡像和sdk,還原nuget包,重新生成,發布

此時項目的目錄結構為

image.png
image.png

運行命令

在文件資源管理器打開文件

image.png
image.png

在上層目錄下運行cmd輸入命令

docker build -f .\Net5ByDocker\Dockerfile -t net5sample .

在不同的目錄下命令有些許差異,這點非常感謝我的朋友王老師

image.png
image.png

注意:可能部分朋友在這一步會拉取官方鏡像比較慢,可以配置docker加速器使用

通過docker客戶端查看我們已經生成的鏡像

image.png
image.png

生成容器

本文通過Terminal軟體執行命令

docker run --name net5sampleone -d -p 8060:80 net5sample

命令簡述:

-d 後台運行

–name 容器名稱

-p 埠映射

截至到這,我們已經把剛才的項目生成了容器,下面我們可以直接通過容器方法上面的項目

驗證項目

通過瀏覽器訪問地址:localhost:8060/swagger

image.png
image.png

懵逼!!!這個時候不是應該出來swagger文檔的介面嗎?難道我們部署的方式有問題?

讓我們訪問下項目的介面

image.png
image.png

說明我們的項目運行是正常的,仔細查看swagger配置後發現,因為為了安全默認不允許發布後出來swagger文檔

image.png
image.png

如果是測試環境或者特殊情況可以通過調整swagger配置位置來顯示文檔

通過Postman訪問

添加用戶

image.png
image.png

查詢用戶

image.png
image.png

刪除用戶

image.png
image.png

再次運行查詢介面數據已經為空了。

微信公眾號【鵬祥】