首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0080. .NET Aspire 必備容器化環境:Windows 上的 OCI 搭建說明

日期:2024年 12月 14日

標籤: .Net Aspire Docker Linux Ubuntu WSL2 PowerShell Podman Docker Desktop

摘要:C# 學習筆記


範例所需: 1. Windows 10/11 作業系統:家用、企業、專業版
      2. Windows 版本更新至內部版本 19043 (Podman) 以上 / 19044 (Docker Desktop) 以上
      3. Windows x64 版本 1903 內部版本 18362 以上 / ARM64 系統 版本 2004 內部版本 19041 以上
相關參考:1. .Net Aspire 官方文件
     0076. 如何通過 Microsoft .NET Aspire 建立可觀察、具生產導向的分散式應用程式並與現有系統無縫整合
     0078. 配置 Microsoft .NET Aspire - 測試容器與實體容器的兼容切換流程
     0079. 快速部署 .NET Aspire 於 Windows、Linux(Ubuntu) 伺服器的方法
解決問題:Windows 上要用 Aspire 開發需要先安裝 OCI(Open Container Initiative),官方提供 2 種方法,以及 1 種非官方方法
基本介紹:本篇分為四大部分。
第一部分:.NET Aspire 最低要求
第二部分:OCI - Windows Docker Desktop
第三部分:OCI - Podman
第四部分:OCI - Docker-CLi






第一部分:.NET Aspire 最低要求

Step 1:使用先決條件

官方先決條件,補充資訊,整理成以下:

1. 需要安裝 NET 8.0
2. .NET Aspire SDK
3. 安裝 Visual Studio 2022 需要更新到 17.10.0 以上
4. Windows 系統內需要有 Windows Docker Desktop 或者 Podman 相關開發時可運行的容器化。
5. 基於第 4. Windows 10/11 專業、企業版以上(才支援 Windows Docker Desktop)
6. 啟用虛擬化技術 Hyper-V 、WSL 2 並且 16G 記憶體以上(若用 Visual Studio 開發,可能 32G 以上才適合開發)


※ Hyper-V 使用於 Windows To Container
※ WSL 2 使用於 Linux To Container
其中先決條件中,有以下描述,微軟建議開發時安裝 Docker DesktopPodman

An OCI compliant container runtime, such as:
Docker Desktop or Podman.



Step 2:為何需安裝 OCI - OCI介紹

OCI (Open Container Initiative, 開放容器化倡議) Linux Foundation 推動的開放標準組織,旨在為容器技術建立統一的標準,確保容器技術在不同平台間的互操作性和一致性。


組成成分有 2 :

1. OCI 容器鏡像格式規範 定義了容器鏡像的結構,包括如何打包應用和依賴,使得這些容器鏡像能夠在不同的 OCI 兼容平台上運行。
2. OCI 運行時規範 定義了容器在啟動和運行時的行為,使得不同的容器運行時環境(如 Docker 和 containerd)都可以一致地管理和運行容器。


簡單說,就是不同作業系統、跨平台上,容器化技術都用統一的規範,避免因為不同的平台而需要開發者特殊改造容器
在 Windows 作業系統上運行 Docker Desktop 或 Potman 就相同於 Linux 原生地 Docker-cli,因為都遵守 OCI
※理論上如此,但實際上作業系統還是有根本的差異,所以意思是 盡可能遵守OCI

Step 3:Windows 上的 OCI限制

微軟建議 Windows 安裝 OCI 的方法有 2 種,加上 Step 2. 可以理解到還可以用 WSL 的方式只安裝 Docker-cli
在 Windows 作業系統可進行容器化,這 3 種方式也對 Windows 有限制,整理如下:
※共同的限制 : 安裝 Windows 10/11 作業系統:家用、企業、專業版

1. Windows Docker Deskop Windows 版本更新至內部版本 19044 (Docker Desktop) 以上
2. Podman Windows 版本更新至內部版本 19043
3. WSL 2 只進行 Docker-cli 的安裝 Windows x64 版本 1903 內部版本 18362 以上
  ARM64 系統 版本 2004 內部版本 19041 以上


Step 4:若未安裝 OCI Aspire 的異常

隨意建立一個 Aspire Host 空專案,若沒有安裝 OCI 直接執行,會出現以下錯誤:

Watch task over Kubbernetes Container resources terminated unexpectedly.


找不到 Container 容器化的方式,因此終止。



第二部分:OCI - Windows Docker Desktop

Step 1:下載軟體

需先至 Windows Docker Desktop 官網 下載軟體安裝,
依照自己的環境安裝對應的版本:

Step 2:安裝

依照著步驟進行安裝


直到安裝完成:

Step 3:重新開機並啟動

安裝完成後,電腦需重新開機。並且重開機完成後打開應用程式


會出現協議確認,接受( Accept )即可:

Step 4:登入 - 1

可以選擇 Skip 跳過,或依照自己的方式登入

Step 5:登入 - 2

若是老用戶,會有自己的帳號,需要在官網登入後,自行手動 點擊 Launch Docker Desktop

Step 6:建議切換至 Linux Container

安裝完成後,預設會是 Launch to Windows Container
需要切換成 Linux

Step 7:建議切換至 Linux Container - 補充原因

Docker desktop to Windows container 目前有人在 2023/11/16 回報異常

最後此 BUG 仍未調整,因此現行仍以 Linux 為主

Step 8:啟動 Aspire Host

最後再回到 Visual Studio 2022 啟動 Aspire Host 專案,可以發現可正常啟動。





第三部分:OCI - Podman

Step 1:下載軟體

需先至 Podman 官網 下載軟體安裝,
依照自己的環境安裝對應的版本:

Step 2:安裝 - 1

依照著步驟進行安裝

Step 3:安裝所需

ComposePodman 必需安裝,然後 Install

Step 4:安裝 WSLv2

如第一部分 Step 7. 所述,如果用 Hyver-V 會出現一些問題,因此要選擇 WSLv2 安裝。

Step 5:直至安裝完成

過程中可保留預設、然後持續 next

直到所有組件的安裝完成,並且在 active 狀態

Step 6:啟動 Aspire Host

最後再回到 Visual Studio 2022 啟動 Aspire Host 專案,可以發現可正常啟動。





第四部分:OCI - Docker-CLi

Step 1:參考文獻

指出可以透過 WSL 安裝 Docker-cli


Step 2:啟用 WSL 2

開啟 Windows 作業系統 -> 程式和功能 -> 開啟或關閉 Windows 功能 -> 打勾 WSL (如下圖):



打勾後進行安裝:


重新啟動:

Step 3:確認 WSL

開啟 PowerShell 輸入以下,可以發現目前沒有任何 Linux 作業系統

wsl



Step 4:啟用 WSL 權限

參考微軟啟用說明,我們在 PowerShell 輸入以下,正式啟用 WSL :

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart



Step 5-1:設定為 WSL 2

上述步驟完成後,要執行以下命令,讓 WSL 用第 2 版,因為第 1 版 Docker-Cli 已經不支持了

wsl --set-default-version 2



Step 5-2:補充:為何要 WSL 2

Docker for Windows 官方文件已經要求 WSL 2 ,沒有再支援 WSL 1

Step 5-3:補充:堅持使用 WSL 1 的異常

如果堅持使用 WSL 1 ,執行到最後,當要啟動 Docker 時

sudo service docker start
sudo service docker status


顯示成功,但實際上失敗了

sudo cat /var/log/docker.log


檢查 Log 會出現失敗

Step 6:安裝 Ubuntu-1

這邊選擇 Ubuntu 20.04 版本進行安裝



Step 7:安裝 Ubuntu-2

打開 PowerShell 到檔案的目錄下,進行安裝 輸入以下指令:


※在此路徑下:

Step 8:安裝完成-進行開啟

安裝完成後,Windows -> 左下角開始 -> 會出現 Ubuntu 的按鈕,點開



第一次啟動會有此畫面:

Step 9:安裝 Docker

接著在系統中輸入 Ubuntu 指令,開始進行安裝 Docker
可參考此篇0001. Ubuntu 上安裝 Docker 與各個容器、Asp.net Core網站安裝 Docker 過程
簡化整套指令如下:

sudo apt update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo apt-get install docker-compose


Step 10:手動安裝 Docker (可選)

如果 Step 9. 無法自動安裝,可能遇到環境問題:
被防火牆擋住了之類的,但自己的環境並沒有權限,就要考慮手動安裝

Step 11:手動安裝 Docker - 下載檔案

官方手動安裝文件

官方建議點開下載此目錄

https://download.docker.com/linux/ubuntu/dists/.


安裝以下套件:

 sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
  ./docker-ce_<version>_<arch>.deb \
  ./docker-ce-cli_<version>_<arch>.deb \
  ./docker-buildx-plugin_<version>_<arch>.deb \
  ./docker-compose-plugin_<version>_<arch>.deb


實際上我們的版本要去的目錄(依照自己的 Windows 作業系統下載):

https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/



Step 12:手動安裝 Docker - 下載完成

下載後可能會有對應的 5 個檔案

Step 13:手動安裝 Docker - 進行安裝

打開 WSL 2 的 Ubuntu 22.04 系統,執行以下代碼(這是範例的,要依照自己下載版本):

sudo dpkg -i ./containerd.io_1.7.22-1_amd64.deb \
./docker-ce_27.3.1-1_ubuntu.20.04_focal_amd64.deb \
./docker-ce-cli_27.3.1-1_ubuntu.20.04_focal_amd64.deb \
./docker-buildx-plugin_0.17.1-1_ubuntu.20.04_focal_amd64.deb \
./docker-compose-plugin_2.29.7-1_ubuntu.20.04_focal_amd64.deb



Step 14:手動安裝 Docker - 確認

再輸入以下指令檢查 Docker-cli 是否安裝完成:

sudo docker info


可以確認已安裝完成:

Step 15:啟動 Aspire Host

最後再回到 Visual Studio 2022 啟動 Aspire Host 專案,可以發現可正常啟動。