1. 程式人生 > >.NET Core微服務之ASP.NET Core on Docker

.NET Core微服務之ASP.NET Core on Docker

一、Docker極簡介紹

1.1 總體介紹

  Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

簡而言之> 容器是一個打包了應用服務的環境,它是一個輕量級的虛擬機器,每一個容器由一組特定的應用和必要的依賴庫組成。

  Docker和傳統虛擬化之間最大的區別在於:容器是在作業系統層面上實現虛擬化,即直接複用本地主機的作業系統

;而傳統虛擬化則是在硬體層面實現,如VMware vShpere, Xen及Citrix等。

  

  

1.2 Docker結構

  Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端API來管理和建立Docker容器。

  Docker 容器通過 Docker 映象來建立。

  容器與映象的關係類似於面向物件程式設計中的物件與類。  

  Docker的架構如下圖所示,Client 通過介面與Server程序通訊實現容器的構建,執行和釋出。Client和Server可以執行在同一臺叢集,也可以通過跨主機實現遠端通訊。

二、Docker的安裝

  (1)準備一臺Linux主機,這裡以CentOS 7.2為例。當然,你也可以使用Windows,不過你得確保是Windows 10 pro版本及以上,且安裝了Hyper-V等一系列的相關軟體。

  (2)安裝docker

  # yum install docker

  

  (3)啟動docker服務

  # systemctl start docker.service

  

  (4)配置開機啟動並驗證

  # systemctl enable docker.service

  

  驗證:檢視docker版本資訊 

  # docker version

  

  (5)配置docker加速器 => 原因你懂得,不設定慢死你,雲伺服器除外

  # vim /etc/docker/daemon.json

  然後重啟docker服務

  # systemctl daemon-reload

  # systemctl restart docker

  (6)Hello World

  # docker run hello-world

  

三、ASP.NET Core on Docker配置

  (1)拉取dotnet/aspnetcore的最新映象,這裡以aspnetcore 2.0為例

  # docker pull microsoft/aspnetcore:2.0

  

  PS:如果要拉取最新版本(比如.net core 2.1),可以將版本號改為aspnetcore:latest

如果你想要拉取更多microsoft的映象,那麼搜尋一下把:# docker search microsoft

  

  拉取了不想要的映象,那麼刪除一個吧,如:# docker rmi imagesID

  

  拉取之後,驗證一下是否拉取成功了:# docker images

  

  (2)現在我們進入VS中為我們的一個ASP.NET Core WebAPI編輯一個Dockerfile

# 父映象
FROM microsoft/aspnetcore:2.0

# 設定工作目錄
WORKDIR /app

# 複製釋出檔案到/app下
COPY . /app

# 設定埠
EXPOSE 8810

# 使用dotnet Manulife.DNC.MSAD.NB.AgentService.dll來執行ASP.NET Core專案,注意大小寫
ENTRYPOINT ["dotnet", "Manulife.CD.MSAD.NB.AgentService.dll", "--server.urls", "http://*:8810"]

  (3)釋出這個ASP.NET Core WebAPI,並將Release檔案傳送到Linux伺服器中(你可以選擇xFTP或者WinScp等工具)

  

  (4)進入上圖的AgentService目錄中,開始打包docker映象

  # docker build -t agentservice-container:1.0 . => 不要忘記後面還有一個點.

  

  此刻再次驗證:# docker images

  

  (5)萬里長征最後一步:執行docker

  # docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0

  

  這裡的兩個埠號分別是宿主機和容器的對映,前一個是你在外部訪問的埠號,後一個是你要對映到docker容器中的埠號,切記和我們在Dockerfile中暴露出來的埠號保持一致。

  PS:這裡如果docker run失敗後再次執行會提示名稱已存在,可以使用以下命令來刪除容器

  # docker rm -f [dockername]

  如果想要docker容器在非正常退出後自動重啟,可以加上--restart選項,例如下面:

  # docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

  (6)驗證docker執行效果

  方式一:在宿主機驗證

  

  方式二:在遠端客戶端通過瀏覽器訪問

  

四、Supervisor守護程序

  

  此部分主要針對於在Linux上的dotnet core應用程式,保證程式在異常或者是電腦重啟的時候仍然能夠正常訪問。大家可以瀏覽楊曉東的《ASP.NET Core Linux下為dotnet建立守護程序》以及focus-lei的《在docker上執行.net core程式》來學習,這裡就不再贅述了。

參考資料

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

.NET Core服務ASP.NET Core on Docker

一、Docker極簡介紹 1.1 總體介紹   Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱

.NET Core服務基於Consul實現服務治理

請求轉發 1.0 asp.net AC port prefix 我們 tle nan 一、Consul基礎介紹   Consul是HashiCorp公司推出的開源工具,用於實現分布式系統的服務發現與配置。與其他分布式服務註冊與發現的方案,比如 Airbnb的Smart

.NET Core服務基於Consul實現服務治理(續)

shell pla code tst 分層 編輯 set req \n 上一篇發布之後,這一篇把上一篇沒有弄到的東西補一下,也算是給各位前來詢問的朋友的一些回復吧。一、Consul服務註冊之配置文件方式1.1 重溫Consul實驗集群  這裏我們有三個Consul Serv

.net core 服務Api閘道器(Api Gateway)

微服務閘道器目錄 1、 微服務引子 2、使用Nginx作為api閘道器 3、自創api閘道器(重複輪子) 3.1、構建初始化 3.2、構建中介軟體 4、結語

基於Apollo實現.NET Core服務統一配置(測試環境-單機) .NET Core服務基於Apollo實現統一配置中心

一、前言 注:此篇只是為測試環境下的快速入門。後續會給大家帶來生產環境下得實戰開發。 具體的大家可以去看官方推薦。非常的簡單明瞭。以下介紹引用官方內容: Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具

.NET Core服務基於Steeltoe使用Eureka實現服務註冊與發現

一、關於Steeltoe與Spring Cloud    Steeltoe is an open source project that enables .NET developers to implement industry standard best practices when b

.NET Core服務基於Steeltoe整合Zuul實現統一API閘道器

一、關於Spring Cloud Zuul   API Gateway(API GW / API 閘道器),顧名思義,是出現在系統邊界上的一個面向API的、序列集中式的強管控服務,這裡的邊界是企業IT系統的邊界。   Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監

.NET Core服務基於Steeltoe使用Hystrix熔斷保護與監控

一、關於Spring Cloud Hystrix      在微服務架構中,我們將系統拆分為很多個服務,各個服務之間通過註冊與訂閱的方式相互依賴,由於各個服務都是在各自的程序中執行,就有可能由於網路原因或者服務自身的問題導致呼叫故障或延遲,隨著服務的積壓,可能會導致服務崩潰。為了解決這一系列的問題

.NET Core服務基於Steeltoe使用Spring Cloud Config統一管理配置

一、關於Spring Cloud Config   在分散式系統中,每一個功能模組都能拆分成一個獨立的服務,一次請求的完成,可能會呼叫很多個服務協調來完成,為了方便服務配置檔案統一管理,更易於部署、維護,所以就需要分散式配置中心元件了,在Spring Cloud中,就有這麼一個分散式配置中心元件 —

NET Core服務路:自己動手實現Rpc服務框架,基於DotEasy.Rpc服務框架的介紹和整合

本篇內容屬於非實用性(拿來即用)介紹,如對框架設計沒興趣的朋友,請略過。   快一個月沒有寫博文了,最近忙著兩件事;    一:閱讀劉墉先生的《說話的魅力》,以一種微妙的,你我大家都會經常遇見的事物,來建議說話的“藝術和魅力”,對於我們從事軟體開發、不太善於溝通

.NET Core服務路:利用DotNetty實現一個簡單的通訊過程

  上一篇我們已經全面的介紹過《基於gRPC服務發現與服務治理的方案》,我們先複習一下RPC的呼叫過程(筆者會在這一節的幾篇文章中反覆的強調這個過程呼叫方案),看下圖

NET Core服務路:自己動手實現Rpc服務框架,基於DotEasy.Rpc服務框架的介紹和整合...

本篇內容屬於非實用性(拿來即用)介紹,如對框架設計沒興趣的朋友,請略過。  快一個月沒有寫博文了,最近忙著兩件事;    一:閱讀劉墉先生的《說話的魅力》,以一種微妙的,你我大家都會經常遇見的事物,來建議說話的“藝術和魅力”,對於我們從事軟體開發、不太善

.NET Core服務路:讓我們對上一個Demo通訊進行修改,完成RPC通訊

 最近一段時間有些事情耽擱了更新,抱歉各位了。   上一篇我們簡單的介紹了DotNetty通訊框架,並簡單的介紹了基於DotNetty實現了迴路(Echo)通訊過程。   我們來回憶一下上一個專案的整個流程: 當服務端啟動後,繫結並監聽(READ)設定的埠,比如1889。

Captcha服務(後續2)— 改造Captcha服務Asp.Net Core專案中如何整合TypeScript

環境準備 .Net Core 版本:下載安裝.Net Core SDK,安裝完成之後檢視sdk版本 ,檢視命令dotnet --version,我的版本是2.2.101 IDE: Visual Studio 2017 目標:將 我的GitHub專案 Captcha.WebApi 改造,在專案中使用TypeS

.NET Core服務基於Steeltoe使用Zipkin實現分散式追蹤

一、關於Spring Cloud Sleuth與Zipkin   在 SpringCloud 之中提供的 Sleuth 技術可以實現微服務的呼叫跟蹤,也就是說它可以自動的形成一個呼叫連線線,通過這個連線線使得開發者可以輕鬆的找到所有微服務間關係,同時也可以獲取微服務所耗費的時間, 這樣就可以進行微服

.NET Core服務基於Jenkins+Docker實現持續部署(Part 1)

一、CI, CD 與Jenkins   網際網路軟體的開發和釋出,已經形成了一套標準流程,最重要的組成部分就是持續整合(Continuous integration,簡稱 CI) => 持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。   它的好處主要有兩個: 快速發現錯

.NET Core服務基於App.Metrics+InfluxDB+Grafana實現統一效能監控

一、關於App.Metrics+InfluxDB+Grafana 1.1 App.Metrics      App.Metrics是一款開源的支援.NET Core的監控外掛,它還可以支援跑在.NET Framework上的應用程式(版本 >= 4.5.2)。官方文件地址:https://ww

.NET Core服務基於Apollo實現統一配置中心

一、關於統一配置中心與Apollo   在微服務架構環境中,專案中配置檔案比較繁雜,而且不同環境的不同配置修改相對頻繁,每次釋出都需要對應修改配置,如果配置出現錯誤,需要重新打包釋出,時間成本較高,因此需要做統一的配置中心,能做到自動更新配置檔案資訊,解決以上問題。   Apollo(阿波羅)是攜

.NET Core服務基於Ocelot實現API閘道器服務

一、啥是API閘道器?   API 閘道器一般放到微服務的最前端,並且要讓API 閘道器變成由應用所發起的每個請求的入口。這樣就可以明顯的簡化客戶端實現和微服務應用程式之間的溝通方式。以前的話,客戶端不得不去請求微服務A(假設為Customers),然後再到微服務B(假設為Orders),然後是微服

.NET Core服務基於Exceptionless實現分散式日誌記錄

一、Exceptionless極簡介紹   Exceptionless 是一個開源的實時的日誌收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程式中,並且提供了REST介面可以應