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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Docker最全教程——从理论到实战(三)

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker最全教程——从理论到实战(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

容器是應用走向云端之后必然的發展趨勢,因此筆者非常樂于和大家分享我們這段時間對容器的理解、心得和實踐。

本篇教程持續編寫了2個星期左右,只是為了大家更好地了解、理解和消化這個技術,能夠搭上這波車。

你可以關注我們的公眾號“magiccodes”給我們留言,也可以加入我們的QQ群(85318032)一起討論,我們希望能夠多多交流,多多分享。

如果覺得不錯,請多多點贊或者請我們喝杯咖啡,你們的支持是我們前進的最大動力!



Docker和ASP.NET Core

Docker 正在逐漸成為容器行業的事實標準,受到 Windows 和 Linux 生態系統領域最重要供應商的支持。 (Microsoft 是支持 Docker 的主要云供應商之一。)現在,Docker 基本上已經在各大云或本地的任何數據中心普及了。

如何將.NET程序托管到Docker之中,相信這是廣大.NET開發者的一個疑問。事實上,.NET Framework 支持在Docker中運行,但是僅能在windows 容器中運行,這并不符合我們的預期,因此,本篇我們只側重于討論ASP.NET CoreDocker

在使用之前,筆者還是有必要介紹下ASP.NET Core。如果您對此非常熟悉和了解或者對此節不感興趣,可以跳過本節。

ASP.NET Core簡介

ASP.NET Core是一個跨平臺的高性能開源框架,用于生成基于云且連接 Internet 的新式應用程序。使用 ASP.NET Core,我們可以:

  • 建置 Web 應用程序和服務、IoT 應用和移動后端。

  • 能夠在 Windows、macOS Linux 上進行開發和運行。部署到云或本地。

  • .NET Core.NET Framework 上運行。

  • 能夠在 IIS、Nginx、Apache、Docker 上進行托管或在自己的進程中進行自托管我們的應用。


性能是.NET Core的一個關鍵特性,這里有必要介紹下。在這塊,我們摘取了一份社區的測試匯總統計,僅供參考:

具體過程大家可以訪問此鏈接來查看詳情:

https://www.cnblogs.com/savorboard/archive/2016/10/17/dotnet-benchmarks.html


ASP.NET Core和Docker

剛才說了這么多,我們回到主題。.NET Core天生就為跨平臺設計,并且和Docker搭配非常友好,而且微軟官方在這塊提供了很多支持。比如說:

  • 輕量

  • 跨平臺,天生對Linux友好

  • 模塊化

  • 提供了輕量型容器鏡像

  • 高性能(領先于Java servlets、Go 和 node.js)

接下來,我們一起來了解官方鏡像。ASP.NET Core的官方鏡像名稱為microsoft/aspnetcore,微軟針對Docker上的 ASP.NET Core 應用進行了優化,因此容器可以更快啟動。為開發人員生成Docker鏡像時,Microsoft 側重于提供了以下主要方案:

  • 用于開發和生成 .NET Core 應用的鏡像。

  • 用于運行 .NET Core 應用的鏡像。

  • 為什么是多個鏡像?因為在開發、生成和運行容器化應用程序時,通常具有不同的優先級。 通過為這些單獨的任務提供不同的鏡像,有助于獨立優化開發、生成和部署應用程序的過程。在開發期間,我們側重的是開發更改的速度以及調試的能力。在生產環境,我們側重的是應用部署和容器啟動的速度和效率。


    這里我們順便提下我們基于.NET Core 2.1開發的免費開源框架——Magicodes.Admin,其demo現在已經完全托管在Docker之中,部署在騰訊云的容器服務之中,大家可以點擊訪問測試下速度和穩定性,啟動速度這點沒得說。推薦訪問Https地址,因域名在備案之中,http域名可能無法訪問。

    Magicodes.Admin開源庫地址:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core


    Demo地址:https://demoadmin.xin-lai.com

    Admin

    123456abcD


    在本篇Docker教程中,我們會結合Magicodes.Admin的實踐進行講解,同時我們也會盡量提供一些實踐案例分享給大家,比如Magicodes.Admin demo、Magicodes云服務、小程序商城(即將開源)、愛車APP等Docker完整托管案例,以便大家更易于理解和使用Docker。在Magicodes.Admin框架中,接口服務使用.NET Core 2.1開發,在docker上基于microsoft/dotnet:2.1-aspnetcore-runtime鏡像使用Kestrel web服務器,后臺前端使用Angular開發,在docker上基于nginx鏡像使用nginx服務器進行托管,并啟用了HTTPS支持和GZIP壓縮。

    我們回過來繼續。.NET鏡像 (microsoft/dotnet) 同樣適用于基于 .NET Core 的控制臺應用。使用 Docker 和 .NET Core非常適用于生產部署和托管,主要有以下幾點:

    • 無需本地安裝——可以直接使用 .NET Framework,而無需本地安裝。只下載相關的Docker 鏡像,其中包含 .NET Framework。

    • 在容器中開發——你可以在一致的環境中開發,使開發和生產環境類似(可避免一些問題,例如開發人員計算機上的全局狀態)。 通過VS的一些擴展插件,我們甚至可以直接從 Visual Studio 啟動容器。

    • 容器中測試——可以在容器中測試,減少由于環境配置不當或上次測試遺留的其他更改而導致的故障。

    • 在容器中生成——可以在容器中生成代碼。

    • 在所有環境中部署——可以通過你的所有環境部署鏡像。 這種方法減少了配置差異導致的故障,通常通過外部配置(例如,注入的環境變量)改變鏡像行為。

    注意:

    Docker 鏡像容器可以在 Linux 和 Windows 上本機運行。 但是,Windows 鏡像僅能在 Windows 主機上運行,Linux 鏡像可以在 Linux 主機和 Windows 主機上運行(到目前為止,使用 Hyper-V Linux VM),其中主機是指服務器或 VM。

    注意:

    .NET Framework也可以使用Docker進行托管,不過僅能托管到windows容器之中。

    在具體應用和實踐之前,我們有必要了解以下內容。


    Kestrel

    Kestrel是一個基于libuv的跨平臺ASP.NET Core web服務器,libuv是一個跨平臺的異步I/O庫。ASP.NET Core模板項目使用Kestrel作為默認的web服務器。

    Kestrel支持以下功能:

    • HTTPS

    • 用于啟用不透明升級的WebSockets

    • 位于Nginx之后的高性能Unix sockets

    Kestrel .NET Core支持的所有平臺和版本所支持Kestrel 可以單獨使用,也可以與反向代理服務器(如 IISNginx Apache)一起使用。 反向代理服務器接收到來自 Internet HTTP 請求,并在進行一些初步處理后將這些請求轉發到 Kestrel

    在沒有 Kestrel 或自定義服務器實現的情況下,不能使用 IIS、Nginx 和 Apache。 ASP.NET Core 設計為在其自己的進程中運行,以實現跨平臺統一操作。 IIS、Nginx 和 Apache 規定自己的啟動過程和環境。 若要直接使用這些服務器技術,ASP.NET Core 必須滿足每個服務器的需求。 使用 Kestrel 等 Web 服務器實現時,ASP.NET Core 可以控制托管在不同服務器技術上的啟動過程和環境。

    注意:

    Kestrel 可以單獨使用,也可以與反向代理服務器(如 IIS、Nginx 或 Apache)一起使用。在docker容器中,我們推薦使用Kestrel。

    在大部分情況下,我們推薦使用反向代理服務器。主要是有以下好處:

    • 可以限制所承載的應用中的公開的公共外圍應用。

    • 可以提供額外的配置和防護層。

    • 可以更好地與現有基礎結構集成。

    • 可以簡化負載均衡和 SSL 配置。?僅反向代理服務器需要 SSL 證書,并且該服務器可使用普通 HTTP 在內部網絡上與應用服務器通信。

    說了這么多,總歸還是“紙上得來終覺淺,絕知此事要躬行”。我們來一起實踐:

    首先我們需要安裝以下包:

    Install-Package Microsoft.AspNetCore.Server.Kestrel -Version 2.1.3

    然后就可以編寫啟動代碼:

    在上面的代碼中,我們通過了配置文件來配置Kestrel,我們也推薦大家使用配置文件來配置Kestrel。相關配置Demo如下:

    當然,我們也可以通過代碼來配置kestrel:


    按環境加載配置

    ASP.NET Core 基于使用環境變量的運行時環境配置應用行為。ASP.NET Core 在應用啟動時讀取環境變量ASPNETCORE_ENVIRONMENT,并將該值存儲在 IHostingEnvironment.EnvironmentName 中。 ASPNETCORE_ENVIRONMENT 可設置為任意值,但框架支持三個值:Development、Staging 和 Production。 如果未設置 ASPNETCORE_ENVIRONMENT,則默認為 Production。

    注意:

    在Docker容器中,我們經常會修改ASPNETCORE_ENVIRONMENT環境變量來模擬開發、測試和生產環境。

    因此在代碼中,我們可以根據環境變量來啟用或關閉相應的功能,其中場景最廣泛的一點是——根據不同的環境加載不同的配置。同時,內置的環境變量配置提供程序(EnvironmentVariablesConfigurationProvider)還可以在運行時從環境變量鍵值對加載配置。具體見以下代碼:


    內置的日志記錄提供程序

    ASP.NET Core 提供以下內置日志記錄提供程序,在很多情況下,對我們會很有幫助:

    • 控制臺日志提供程序

    • 調試日志提供程序

    • EventSource日志提供程序

    • EventLog日志提供程序


    控制臺日志提供程序

    在Docker環境下,為了便于排錯,我們推薦啟用此日志提供程序。在平常的情況下,我們通過控制臺運行程序(比如通過dotnet run運行)也會輸出控制臺日志。在使用之前,需要安裝以下包:

    Install-Package Microsoft.Extensions.Logging.Console -Version 2.1.1

    然后我們可以在代碼中通過以下代碼啟用:

    logging.AddConsole();

    完整代碼如圖所示:

    添加了之后,我們在云端的容器服務的日志中,就可以看到控制臺日志了。下面以騰訊云容器服務為例。首先打開騰訊云【容器服務】的【服務】頁面,如圖所示:

    我們可以點擊【日志】操作按鈕的圖標來查看日志:

    我們也可以點擊具體的某個實例來查看相關日志,這里就不多寫了。

    注意:

    通過控制臺日志,我們可以輸出一些啟動信息以用來做啟動診斷,同時我們也可以根據控制臺日志來查看請求狀況和運行狀況。


    調試日志提供程序

    和控制臺日志一樣,也需要安裝相關依賴包:

    Install-Package Microsoft.Extensions.Logging.Debug -Version 2.1.1

    該包使用 System.Diagnostics.Debug 類(Debug.WriteLine 方法調用)來寫入日志輸出。注意,在 Linux 中,此提供程序將日志寫入 /var/log/message

    代碼啟用方式如下所示:

    logging.AddDebug();


    EventSource日志提供程序

    包依賴關系如下:

    Install-Package Microsoft.Extensions.Logging.EventSource -Version 2.1.1

    該提供程序可實現事件跟蹤。不過值得注意的是,該提供程序尚無支持 LinuxmacOS 的事件集合和顯示工具。期待官方提供相關工具。

    而在windows server,可以通過開源工具https://github.com/Microsoft/perfview來收集和查看日志,如下圖所示:


    EventLog日志提供程序

    需要添加包:Microsoft.Extensions.Logging.EventLog。

    主要用于向 Windows 事件日志發送日志輸出。


    關于ASP.NET Core的相關內容,我們先介紹到這里。接下來我們主要是圍繞Docker開發工作流程在進行講解。


    搭建并使用Docker

    Docker的安裝非常簡單,我們這里僅以windows 10操作系統(推薦)為例進行講解。


    安裝Docker

    這里以Docker for windows為例,其他環境請參考官網教程。

    注意:

    不推薦使用Docker Toolbox,Docker Toolbox適用于較舊的Mac和Windows系統。

    要安裝 Docker,請先查看用于 Windows 的 Docker:安裝須知了解相關信息。

    安裝須知鏈接:https://docs.docker.com/docker-for-windows/install/#what-to-know-before-you-install

    注意:

    使用Docker for windows需要啟用Hyper-V功能。以下是系統要求:

    • Windows 10 64位:Pro,Enterprise或Education(Build 14393或更高版本)。

    • 在BIOS中啟用虛擬化。通常,默認情況下啟用虛擬化。這與啟用Hyper-V不同。

    • 支持CPU SLAT的功能。

    • 至少4GB的RAM。

    Docker for Windows安裝包括:安裝提供 Docker Engine,Docker CLI客戶端,Docker Compose,Docker Machine和 Kitematic。

    安裝包下載鏈接:https://store.docker.com/editions/community/docker-ce-desktop-windows

    參考:https://docs.docker.com/docker-for-windows/

    安裝完后,會提示點擊重啟電腦。重啟后會自動啟動Docker程序,如果彈出下圖所示提示,則需要在Windows 功能中啟用Hyper-V功能和 在BIOS CPU配置中打開 “虛擬化配置”,打開之后,如下圖所示,虛擬化會顯示已啟用。反之安裝成功。

    注意虛擬化已啟用,如下圖所示(這里秀一把我NB的臺式機,是不是比你們的服務器都高端N個檔次):

    以上配置完成后我們推薦將docker容器切換到Linux環境,選擇右下角Docker圖標右鍵選擇” Switch to Linux containers”進行切換,如果顯示” Switch to Windows containers”則已處于Linux容器。



    這是我們可以測試Docker環境是否正常,打開命令行,輸入docker –version:

    注意:

    我們推薦使用Linux容器服務,因為目前主流的容器系統是Linux,并且從資源的利用來說,Linux可以讓資源得到更大的利用。

    關于docker的安裝和配置,這里不再細說,大家可以關注我們的公眾號“magiccodes“來查閱相關的教程以及錄屏。


    配置Docker本地環境

    安裝完成并且啟動后,右下角有個小圖標:

    右鍵打開設置。

    Docker for Windows 中的共享驅動器必須配置為支持卷映射和調試。右鍵單擊系統托盤中的 Docker 圖標,單擊“設置”,然后選擇“共享驅動器”。 選擇 Docker 存儲文件的驅動器。 單擊“應用”。

    其他的配置我們這里就不多說了,具體見公眾號“magiccodes”中提供的錄屏教程。


    運行一個簡單的demo

    我們先運行官方的Hello world示例:

    docker run hello-world

    我們也可以簡單運行一個web示例,比如:

    docker run --name aspnetcore_sample --rm -it -p 8000:80 microsoft/dotnet-samples:aspnetapp

    應用程序啟動后,使用瀏覽器打開http://localhost:8000,即可看到以下界面:

    Docker的安裝和配置在Windows 10操作系統下非常簡單,我們也極力推薦大家使用此環境。畢竟,一個好的開發環境可以大大提高大家的使用和開發效率。

    前期內容:

    Docker最全教程——從理論到實戰(一)

    Docker最全教程——從理論到實戰(二)

    長按識別二維碼,了解更多精彩內容

    如果喜歡作者的文章,請關注“magiccodes”訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


    QQ群:

    編程交流群<85318032>?

    產品交流群<897857351>?


    總結

    以上是生活随笔為你收集整理的Docker最全教程——从理论到实战(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

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