輕松使用 .NET CLI 將 C# 應用程式容器化
容器是一個強大的工具,但對於許多開發者來說,將C#應用程式放入容器的想法可能會讓人感到不知所措。 手動設置Dockerfile和處理相依性可能很複雜。 然而,正如Tim Corey在他的视频中解释的那样,.NET CLI简化了这一过程,使开发者无需Dockerfile就能将他们的应用程式容器化。
在本文中,我们将深入探讨使用Tim在其视频中提到的分步方法来容器化C#应用程式,"使用.NET CLI輕鬆容器化您的C#應用程式。"遵循Tim的指導,我們將了解如何將.NET應用程式輕鬆發布到Docker容器中。
容器的.NET CLI介紹
在视频的开头,Tim解释了容器化的需求。 他强调整个容器是一个很棒的工具,但设置Dockerfile并正确配置的过程可能很复杂。
Tim介紹了一種使用.NET CLI的更简单的方法,而不是手動創建Dockerfile。 這種方法使開發人員可以在不手動編寫Dockerfile的情況下創建容器化應用程式。
Tim還說明這個影片是他10分鐘訓練系列的一部分,該系列專注於快速且有效的技術主題介紹。
應用程式設置
Tim開始以一個最小的Web API應用程式作為範例。 應用程式包含一個稱為/messages的單一端點,會返回一些資料。
為了展示應用程式在容器化之前的行為,Tim在本地執行它。 透過存取/messages端點,他確認它在容器外部正確運行。
在進行容器化之前,他還檢查以下事項:
- Docker已安裝並在他的計算機上運行。
- 起初沒有現有的Docker影像或容器。
這確保當創建新容器時,我們可以清楚地看到變更。
準備容器化
為了將應用程式容器化,Tim在專案目錄內進入命令行。 然後運行以下命令:
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
Tim分解命令的各個部分:
-o:Linux→ 為基於Linux的容器發布應用程式。-a:x64→ 指定架構為64位。-p:PublishProfile=DefaultContainer→ 使用默認的容器設定。-c:Release→ 在發布模式下發布應用程式以提高性能。
Tim強調,Linux容器更優於Windows容器,因為Windows容器主要作為.NET Framework應用程式的橋樑。
發布及創建容器
一旦執行發布命令,Tim解释了.NET CLI會自动确定必要的配置,并将所有内容打包到容器中。 他指出:
- 此方法無需Dockerfile。
- 該過程在一個步驟中構建應用程式並將其容器化。
- 使用的基礎影像是Microsoft的.NET 8運行時容器。
發布後,他檢查了Docker Desktop,並確認新建的容器影像background-demo已經創建。 初始容器的大小是221 MB。
Tim向觀眾保證,這個大小可以稍後減小。
運行容器
為了測試容器化的應用程式,Tim直接從Docker Desktop啟動容器。由於尚無運行中的容器,他點擊"運行"並設定可選的設置:
- 他將容器的內部端口(隨機分配)映射到主機機器的8080端口。
啟動後,他使用網絡瀏覽器訪問應用程式。 起初,訪問根URL會給出404錯誤,但導航到/messages成功顯示預期的資料。
Tim強調了一個重要點:
- 應用程式在容器內運行的時間是UTC,可能與本地機的時區不同。
他還指出,由於應用程式是以發布模式發布的,因此預設禁用了Swagger UI。
優化容器大小
此時,預設的容器大小為221 MB,Tim承認這相當大。 為了減小尺寸,他介紹了一個更輕的基礎影像。
通過修改jammy-chiseled,一個較小的基於Ubuntu的影像:
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");
然後他重新運行發布命令,並在重建容器後再檢查影像大小。
新的影像大小是113 MB—減少了大約100 MB! 雖然尺寸較小,但應用程式的功能相同。
刪除並重建容器
Tim展示了刪除容器以清理工作空間。 然而,Docker影像仍然可用,所以如果需要,可以重新創建容器。
他強調,一旦建好了容器,就可以:
- 在本地運行以開發和測試。
- 推送到像Docker Hub或Azure Container Registry這樣的容器註冊表。
- 作為雲部署Web應用程式的基礎。
結論及最終想法
Tim透過強調使用.NET CLI進行容器化的關鍵優勢來結束影片:
- 無需Dockerfile – .NET CLI會自動處理所有事項。
- 快速簡便的過程 – 僅需一個命令,一個應用程式就可以被容器化。
- 更小、更優化的影像 – 使用
jammy-chiseled減少容器大小。 - 無縫部署 – 容器可以推送到各種雲端服務中。
最終想法
Tim的方法透過.NET CLI來容器化C#應用程式簡單、快速且有效。通過遵循他的方式,開發人員可以創建和優化容器,而不需需具備廣泛的Docker知識。
通過利用Linux容器、優化的基礎影像和精簡的發布命令,此技術讓開發人員可以以最小的努力高效地容器化其應用程式。
如果您想更深入了解,請務必查看Tim Corey的影片。 它提供了整個過程的清晰分步教程。
