IRONSOFTWAREHOME

部署到容器和 Docker Hub - 構建一個 C# 課程中的範例 API

Deploying to a Container and Docker Hub - Building a Sample API in C# Course

Tim Corey

23m 51s

將.NET Core應用程式部署到Docker容器對現代開發者來說是至關重要的技能。 容器提供不可變的基礎架構、易於分發的特性和輕量級運行環境。 在這份深入指南中,我們將逐步介紹如何將範例API部署到Docker容器,然後將其推送到Docker Hub,按照Tim Corey的綜合影片教程《部署到容器和Docker Hub – 构建C#中的範例API》中的步驟進行。

讓我們逐步探討這個過程,並參考具體的時間戳以便跟隨。 本指南包括使用命令如.NET publish、docker run命令,以及基礎映像、運行時映像和容器映像等術語——這些都是使用Docker部署.NET應用程式的重要概念。

建立和理解範例API

在影片的開頭,Tim強調了在學習Web開發時一個範例應用程式的實用性。 該應用程式包括/courses和/health等端點,模擬真實世界中的問題如健康檢查退化,並設計為可以在本地機器和遠程伺服器上運行。

這是一個.NET Core應用程式(更確切地說是ASP.NET Core最小API),可以通過Docker容器輕鬆運行和測試。

本地設置Docker

Tim使用Docker Desktop檢查Docker是否已安裝在他的本地機器上。他注意到即使本地沒有安裝Docker,也可以直接發布到Docker Hub,但為了演示,他從本地部署開始。

他展示了兩個預先安裝的Docker映像:

  • 一種用於字幕的個人工具

  • 微軟的官方ASP.NET Core基礎映像:mcr.microsoft.com/dotnet/aspnet

此基礎映像約328 MB,並充當我們容器映像的基礎。 微軟在他們的MCR(微軟容器註冊表)上託管這些影像,它們支持Linux容器和Windows容器。 對於這個項目,Linux是目標操作系統。

在本地發布到容器

Tim導航到API項目資料夾,並在命令行中運行以下命令:

dotnet publish -p:PublishProfile=DefaultContainer

該命令使用.NET 8和.NET 9中內建的容器支持,這消除了對Dockerfile的需求。發布過程選擇一個合適的運行時映像並構建一個自包含的容器映像。

這就是在背後發生的事情:

  • 使用項目文件(.csproj)構建API

  • 使用.NET restore命令恢復依賴性

  • 輸出進入一個發布文件夾

  • 生成一個DLL文件並嵌入到容器中

生成的映像大約333 MB(比基礎大5 MB)。

使用Docker運行影像

影像建立後,Tim使用Docker Desktop運行容器。 在內部,應用程式監聽8080端口。Tim通過在端口配置中輸入0將其映射到隨機主機端口。

容器啟動時名稱隨機生成(例如,elegant_hoover),瀏覽器打開顯示一個運行中的API,預設響應為"Hello World"。

通過浏覽/courses和/health,Tim確認API運行正常。 健康檢查端點對於模擬生產環境場景非常有用。

要查看運行中的容器,您可以在CLI中使用docker ps命令。 Tim之後刪除運行中的容器和影像以演示清理。

创建Docker Hub檔案庫

接下來,Tim移至雲端部署部分。 他登錄到他的Docker Hub帳戶並建立一個名為thesampleapi的公共檔案庫。

這是Docker影像將被推送的地方,以便其他人可以使用:

docker pull timcorey/thesampleapi:latest

配置專案以用於Docker Hub

在API的專案文件內,Tim新增了元資料以定義Docker影像的發布位置和方式。 他新增了以下程式碼塊:

<ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags>
  • ContainerRegistry: 指定Docker Hub為目標註冊表。

  • ContainerRepository: Docker Hub檔案庫的路徑。

  • ContainerImageTags: 標記影像以進行版本控制和最新發布。

這為未來的多階段構建流程準備了影像,雖然Tim目前保持簡單。

發布到Docker Hub

Tim再次運行相同的發布命令:

dotnet publish -p:PublishProfile=DefaultContainer

最初,推送失敗因為他忘了保存.csproj文件。保存後重新運行命令,影像成功上傳到Docker Hub。

在Docker Hub中,thesampleapi檔案庫下顯示最新和1.0.0標籤。 這些標籤允許在提取特定版本時具有靈活性。

從Docker Hub提取影像

Tim演示如何從任何安裝了Docker的機器提取影像:

docker pull timcorey/thesampleapi:latest

由於Docker層快取,大部分已存在於基礎映像中,因此下載快速。

要運行影像:

docker run -p 0:8080 timcorey/thesampleapi:latest

這將隨機主機端口映射到內部端口8080。

建立影像的新版本

為了演示版本控制,Tim編輯.csproj文件以:

<ContainerImageTags>1.0.1;latest</ContainerImageTags>

然後重新運行發布命令:

dotnet publish -p:PublishProfile=DefaultContainer

現在Docker Hub檔案庫顯示三個標籤:

  • 1.0.0

  • 1.0.1

  • 最新(現在指向1.0.1)

Tim解釋道,儘管有多個標籤,Docker不儲存重複的層,通過不同的層優化磁盤使用。

使用Docker影像進行本地開發

Tim強調一旦影像在Docker Hub上,您可以隨時在任何計算機上通過以下方式運行:

docker pull timcorey/thesampleapi:latest

然後使用docker run命令啟動它。完成後,使用以下命令清理:

docker ps           # Get container ID
docker stop <id>    # Stop the container
docker rm <id>      # Remove the container
docker rmi <image>  # Remove the image

他解釋說,這非常適合按需開發和測試,而不會讓您的本地機器膨脹。

接下來做什麼?

Tim總結道,接下來的步驟是將相同的API部署到虛擬專用伺服器(VPS)。 他將帶領我們完成映射域並配置容器以公開存取。

結論:從本地構建到雲端部署

使用Tim Corey的影片指南,我們已經:

  • 使用.NET new console構建了一個.NET Core API

  • 使用.NET restore和.NET publish進行構建和部署

  • 建立了一個不需要範例Dockerfile的Docker容器

  • 將容器影像上傳到Docker Hub

  • 使用docker run提取並運行容器

  • 管理標籤和不同的影像層

  • 使用版本化影像為生產環境做好準備

這個圍繞Docker和.NET的工作流程非常適合構建可擴展、可測試和可共享的應用程式。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立