歡迎使用 Blazor!Blazor 是一個使用 .NET 生成互動式客戶端 Web UI 的框架:
- 使用 C# 代替 JavaScript 來建立資訊豐富的互動式 UI。
- 共享使用 .NET 編寫的伺服器端和客戶端應用邏輯。
- 將 UI 呈現為 HTML 和 CSS,以支援眾多瀏覽器,其中包括移動瀏覽器。
- 與新式託管平臺(如 Docker)整合。
任務描述
使用VS2019模板建立Blazor專案,新增Dockerfile打包為Linux映象,最後釋出到Azure應用服務, 並檢視映象的釋出日誌和啟動日誌。要完成這次任務,需要提前準備以下條件:
1)安裝VS2019,Docker Desktop,App Service For Container, Azure Container Registry(ACR)
2)VS 2019 連線到中國區Azure賬號,可參考文章: 連線到微軟雲Azure中國區 By VS 2019, VS Code, Powershell
第一步:建立Blazor專案
- 在VS 2019中建立新專案,選擇Blazor App模板(如無此模板,則下載並安裝最新的.Net SDK即可),建立包含Client端(WebAssembly)的專案
- 選擇MyLife.Blazor.Server專案為啟動專案,F5測試本地執行情況
第二步:建立Linux映象並本地部署測試
- 必須啟動Docker Desktop應用並配置為使用Linux容器,預設為Windows容器,點選Docker執行圖示右鍵選擇"Switch to Linux Container"
- 在VS 2019中,選中MyLife.Blazor.Server專案,右鍵新增“Docker Support”,選擇“Linux”。
新增Dockerfile的檔案內容為:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build WORKDIR /src COPY ["MyLife.Blazor/Server/MyLife.Blazor.Server.csproj", "MyLife.Blazor/Server/"] COPY ["MyLife.Blazor/Shared/MyLife.Blazor.Shared.csproj", "MyLife.Blazor/Shared/"] COPY ["MyLife.Blazor/Client/MyLife.Blazor.Client.csproj", "MyLife.Blazor/Client/"] RUN dotnet restore "MyLife.Blazor/Server/MyLife.Blazor.Server.csproj" COPY . . WORKDIR "/src/MyLife.Blazor/Server" RUN dotnet build "MyLife.Blazor.Server.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "MyLife.Blazor.Server.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyLife.Blazor.Server.dll"]
- 根據VS 2019的錯誤提示,在Docker Desktop中選擇Setting -> Resources ->File sharing中新增當前專案檔案路徑。
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
- 在Docker Desktop中檢視Blazor專案執行情況
第三步:釋出到ACR並開啟Admin訪問許可權
- 在VS 2019中點選發布“Publish”,選擇ACR(Azure Container Registry).
- 登入到ACR門戶,開啟Admin User訪問許可權
第四步:建立App Service for Container
- 建立App Service(https://portal.azure.cn/#create/Microsoft.WebSite),選擇Docker Container,Operating System為Linux。其他值則隨意而定。
- 在Docker中選擇Image Source為ACR(Azure Container Registry)。 並選擇上一步上傳的Image最新版
- 驗證完成後,點選建立即可。
第五步:檢視映象拉取日誌及Container啟動日誌
- 登入到第四步建立的App Service門戶頁面,點選Container settings頁面,檢視Image的設定及拉取日誌
- 在App Service門戶的Log Stream頁面,檢視Container啟動日誌
注意:如果應用修改後重新生成了Image,應用服務通過重啟(restart)及可以拉取最新的映象並部署。
參考資料:
Run a custom container in Azure: https://docs.microsoft.com/en-us/azure/app-service/quickstart-custom-container?pivots=container-windows#update-locally-and-redeploy