.NET 之 Docker 部署詳細流程

2022-02-03 DotNet

開篇語

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

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

創建項目

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

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

默認配置

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

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

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

修改配置

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

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:51539",
      "sslPort": 0
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Net5ByDocker": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "dotnetRunMessages": "true",
      "applicationUrl": "http://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();
        }
    }

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

生成鏡像添加dockerfile

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

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

此時項目的目錄結構為

運行命令

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

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

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

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

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

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

生成容器

本文通過Terminal軟體執行命令

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

命令簡述:

-d 後臺運行

--name 容器名稱

-p 埠映射

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

驗證項目

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

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

讓我們訪問下項目的接口

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

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

通過Postman訪問添加用戶查詢用戶刪除用戶
再次運行查詢接口數據已經為空了。

轉自:Azing

連結:cnblogs.com/azrng/p/14730149.html

- EOF -

看完本文有收穫?請轉發分享給更多人

推薦關注「DotNet」,提升.Net技能 

點讚和在看就是最大的支持❤️

相關焦點

  • Docker集群管理之Docker Compose
    前言:在上一篇《Docker集群管理之Docker Machine》中,我們通過源碼分析了解了Docker Machine的工作原理,使用者可以通過Docker Machine的一條命令在任意支持的平臺創建一個Docker主機,並能集中管理這些主機。Docker主機創建好之後,接下來就該考慮Docker容器部署的問題了。
  • Docker+Jenkins+Github實現Golang項目自動部署
    docker容器內訪問宿主機上的docker。/main"]cd $WORKSPACEexport GOPROXY=https://goproxy.iogo mod tidy# 列印依賴,部署成功後查看版本依賴是否如預期cat ./go.modcd .
  • 如何使用 Docker 部署容器
    要部署容器,請使用docker命令,如下所示:docker run --name NAME -p PORTS IMAGE備註:- NAME等於您要為容器提供的名稱(這可以是任何內容,例如nginx-webserver)。- PORTS您要使用的埠(以NETWORK PORT:CONTAINER PORT形式)。
  • 基於Docker部署 Tomcat集群、 Nginx負載均衡
    博文主要介紹了Tomcat 集群+ Ngixn 負載的Docker環境部署。可以直接通過 容器名 或者 容器名.網絡名 (uag_app_3,uag_app_3.uag_net) 通過 DNS 解析獲取到 IP。
  • 運維人員的解放---Docker快速部署 - 51CTO.COM
    個人體會較深的兩處優點:1、 快速部署,傳統的部署模式是:安裝(包管理工具或者源碼包編譯)->配置->運行;Docker的部署模式是:複製-docker容器遷移簡單方便,可以任意的拷貝部署,以後再也不怕新部署環境了,一堆依賴裝的想死有木有。
  • 優化 .net core 應用的 dockerfile
    優化 .net
  • 【長篇博文】Docker學習筆記與深度學習環境的搭建和部署(二)
    歡迎關注我的csdn:原始碼殺手我的CSDN上一篇文章:Docker學習筆記與深度學習環境的搭建和部署(一)https://blog.csdn.net/weixin_41194129/article/details/113823982【長篇博文】Docker學習筆記與深度學習環境的搭建和部署
  • docker-4:mac使用docker部署開發用rocketmq
    為了開發方便,有時需要在本地部署rocketmq,使用docker是一個高性價比的方式,故有此文。目錄:(1).mac本地docker化rocketmq(2).mac本地docker化rocketmq-console(3).測試(1).mac本地docker化rocketmq現在官方rocketmq-docker:git clone https://github.com/apache/rocketmq-docker
  • 【Docker】超詳細基礎教程-上篇
    這篇文章中我的運行環境都是在CentOS7中運行,配套視頻: 2020 Docker最新超詳細版教程通俗易懂。start docker# 設置開機自動啟動systemctl enable docker# 測試docker run hello-worldDocker官方的中央倉庫: 這個倉庫是鏡像最全的,但是下載速度較慢。
  • Kind + Docker 一鍵部署K8s集群
    時下網際網路最火的技術無非是容器雲和AI,而虛擬雲技術方面最火則是docker和K8S。docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。
  • 前端如何玩轉 Docker 部署,請看這裡
    寫一個網站、學會 Vue.js 是很多人的「學習窗口」,只要離開了這個「學習窗口」,他們就不想學了:我都學這麼多了,草,怎麼最後還要學部署啊。所以,這篇文章就跟大家分享一下關於 Docker 部署的那些事。
  • Flask + Docker 無腦部署新手教程
    這種情況我有經驗:「google 啥都有,搜 flask 部署去」朋友:「完全看不懂」我直覺想反駁,可是想起當初我學部署的時候也一頭霧水肝幾天也沒搞明白。其實在 docker 流行的今天,部署已經要比當初我學的時候要方便得多,但是前段時間我 google 搜了一圈的確沒看到幾篇比較好的 Docker + Flask 的指導,於是寫一篇菜鳥也能看懂的新手教程。本教程的特點就是比較無腦,照著做就能部署成功。同時給出一些連結,想深入一點了解的可以自行深入學習。
  • 用Docker部署SpringBoot應用程式
    將應用程式部署為Docker容器可以幫助您在多個環境(即dev、QA、暫存、生產)中順利地行動應用程式。本教程向您展示了如何利用Docker部署SpringBoot應用程式。unzip demo.zip -d spring-boot-dockercd spring-boot-docker接下來,通過創建文件添加一個web控制器src/main/java/com/okta/springdocker
  • 微服務部署到docker中
    可以看到項目根目錄下新增一個名為Dockerfile的文件6.通過Xftp將項目從Windows下的磁碟位置拷貝到Linux的root目錄下二、Linux下通過Docker構建應用1.通過Xshell連接上Linux虛擬機,進入到項目目錄下,然後通過docker
  • Docker是什麼?有什麼用途?及理論知識詳細說明
    及理論知識詳細說明 代碼與遠方 發表於 2020-02-07 12:34:51 Docker是什麼?
  • docker會用了?不來了解一下全自動構建部署嗎
    如何使用github+docker hub(官方)+shell定時任務實現項目自動構建、部署。上面的三點呢,都是我親手去驗證過的,完全沒有問題的一種方式。當然如果大家有什麼更好的方式,可以在評論或者是私信告訴我,保持一顆求知的心!!!
  • 在 Docker 中完整部署 Web 應用
    一個完整的 Web 應用包含前端頁面、資料庫、後臺邏輯等,按照一般流程去構建需要配置 Nginx、MySQL,以及後臺伺服器,運維涉及到的部分十分複雜
  • Docker中部署TensorFlow GPU
    Docker中部署TensorFlow GPUDocker 是在 Linux 上啟用 TensorFlow GPU 支持的最簡單方法,因為只需在主機上安裝
  • 分享用Docker部署大桌子協同辦公平臺的一些經驗
    網上看了不少的項目和教程,對比過幾款收費和開源的協同軟體,最終還是大桌子Dzzoffice+onlyoffice能夠滿足我們的需求,一是開源不收費(除非是找大桌子團隊或者其他開發公司對Dzzoffice進行定製化開發才需要費用;然後就是如果自己不會安裝,可以花三百塊讓大桌子團隊幫你安裝);二是自己算是還懂點編程,能夠在開源的基礎上做點優化啊接口啊什麼的;三就是在程序架構和部署方面自己也能夠搭建個毛坯出來
  • 使用 Docker 讓部署 Django 項目更加輕鬆
    這些痛苦包括:要去伺服器上執行 n 條命令本地環境和伺服器環境不一致,明明本地運行沒問題,一部署伺服器上就掛掛,死活啟動不起來如果上面的情況發生了,又要去伺服器上執行 n 條命令以解決問題本地更新了代碼,部署上線後,上述歷史又重演一遍,想死的心都有了那麼我們有沒有辦法,讓本地開發環境和線上環境保持一致?